我有两个JPA实体,一个扩展另一个实体:
@Entity
@Access(AccessType.FIELD)
public abstract class ExampleTypeA {
@GeneratedValue
@Id
private long entityId;
}
@Entity
@Access(AccessType.PROPERTY)
public class ExampleTypeB extends ExampleTypeA {
}
抽象实体使用AccessType.FIELD
,扩展类型使用@Access(AccessType.PROPERTY)
。
这样的构造可能吗?我可以想象entityId
不能访问ExampleTypeB
字段。我假设我需要重写ExampleTypeA
的ID-getter和setter才能通过属性访问来访问该字段。
像这样:
@Entity
@Access(AccessType.FIELD)
public abstract class ExampleTypeA {
@GeneratedValue
@Id
private long entityId;
public long getEntityId() {
return entityId;
}
public void setEntityId(final long entityId) {
this.entityId = entityId;
}
}
@Entity
@Access(AccessType.PROPERTY)
@Inheritance(strategy = InheritanceType.JOINED)
public class ExampleTypeB extends ExampleTypeA {
@GeneratedValue
@Id
@Override
public long getEntityId() {
return super.getEntityId();
}
@Override
public void setEntityId(final long entityId) {
super.setEntityId(entityId);
}
}
这是正确的方法吗?在类型层次结构中混合AccessType
可能是代码异味,还是根本不可能?