我研究 JPA/Hibernate @Entity
继承已有一段时间了,但似乎找不到任何可以解决我想要实现的目标的东西。
基本上,我希望能够根据需要定义一个包含所有列和表映射的@Entity
。然后,我希望能够使用在每个“子实体”的主体中定义的不同组的 @Transient
方法在许多不同的位置扩展 @Entity
。这是我正在努力实现但迄今为止没有成功的基本示例:
@Entity
@Table(name = "mountain")
public class MountainEntityBase implements Serializable {
public Integer mountainId = 0;
public Integer height = 0;
public List<ExplorerEntityBase> explorers = new ArrayList<ExplorerEntityBase>();
@Id
@GeneratedValue
@Column(name = "mountain_id")
public Integer getMountainId() { return mountainId; }
public void setMountainId(Integer mountainId) { this.mountainId = mountainId; }
@Column(name="height")
public String getHeight() { return height; }
public void setHeight(String height) { this.height = height; }
@OneToMany(mappedBy="mountainId")
public List<ExplorerEntityBase> getExplorers() { return this.explorers; }
public void setExplorers(List<ExplorerEntityBase> explorers) { this.explorers = explorers; }
}
.
@Entity
public class MountainEntity extends MountainEntityBase implements Serializable {
public List<MountainEntity> allMountainsExploredBy = new ArrayList<MountainEntity>();
@Transient
public List<MountianEntity> getAllMountainsExploredBy(String explorerName){
// Implementation
}
}
因此任何扩展类都只会在其主体中定义@Transient
。但我也想考虑子类为空的情况:
@Entity
public class MountainEntity extends MountainEntityBase implements Serializable {
}
在此先感谢您提供的任何帮助。
最佳答案
JPA 中的继承是使用 @Inheritance
注释在根实体上指定的。您可以在那里指定层次结构的数据库表示。检查the documentation了解更多详情。
如果您的子类仅定义 transient 字段(不是方法)(即未保存在数据库中),那么鉴别器列也许是最佳选择。但也可能是您实际上不需要继承的情况——主要实体可以拥有所有方法(因为它拥有方法操作的所有字段)
关于java - JPA @Entity 继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6170564/