I want to extend POJO abstract class by entity. Something like that:
public abstract class AbstractClientEntity {
protected Long id;
protected String name;
protected String email;
protected List<AccountEntity> accountEntities = new ArrayList<>();
public AbstractClientEntity() {
}
public AbstractClientEntity(Long id, String name, String email, List<AccountEntity> accountEntities) {
this.id = id;
this.name = name;
this.email = email;
this.accountEntities = accountEntities;
}
// public getters, setters, equals, hashCode
}
@Entity
public class ClientEntity extends AbstractClientEntity {
public ClientEntity() {
}
public ClientEntity(Long id, String name, String email, List<AccountEntity> accountEntities) {
super(id, name, email, accountEntities);
}
@Override
@Id
@GeneratedValue
public Long getId() {
return id;
}
@Override
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
public List<AccountEntity> getAccountEntities() {
return accountEntities;
}
}
With this approach I get in DB cliententity
table with only id
column. But when I overrided all setters and getters in ClientEntity
– it works fine (all fields mapped successfully).
@Entity
public class ClientEntity extends AbstractClientEntity {
public ClientEntity() {
}
public ClientEntity(Long id, String name, String email, List<AccountEntity> accountEntities) {
super(id, name, email, accountEntities);
}
@Override
public void setId(Long id) {
this.id = id;
}
@Override
public String getName() {
return name;
}
@Override
public void setName(String name) {
this.name = name;
}
@Override
public String getEmail() {
return email;
}
@Override
public void setEmail(String email) {
this.email = email;
}
@Override
public void setAccountEntities(List<AccountEntity> accountEntities) {
this.accountEntities = accountEntities;
}
@Override
@Id
@GeneratedValue
public Long getId() {
return id;
}
@Override
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
public List<AccountEntity> getAccountEntities() {
return accountEntities;
}
}
So the main question: how to not override all setters and getters in ClientEntity
and achieve successful mapping?
AbstractClientEntity
should NOT be an @Entity
or @MappedSuperclass
or something else JPA-specific. So my question differs from #1, #2, #3, #4.
I hope it is possible.
JSR-000338 Java Persistence 2.1 Specification (2.11 Inheritance, p 54) says:
Entities can extend non-entity classes and non-entity classes can extend entity classes.
Also I want to achieve Hibernate independent solution if it possible...