java - JPA @Entity 继承

标签 java hibernate inheritance jpa persistence

我研究 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/

相关文章:

java - 使用 Java 传递给 Perl 脚本的参数的问题

java - 限制按键输入以防止垃圾邮件

java - 尝试将数据添加到数据库时出现未知列

hibernate - 使用Hibernate进行复杂查询的问题

visual-studio-2010 - 从自定义基类继承 T4 模板,提供未安装 Visual Studio 2010 SDK

javascript - 在 JavaScript 中,当我们实例化派生对象时,原型(prototype)的函数隐藏在哪里?

java - 使用构造函数参数实例化泛型类型?

java - Android Google 登录异常

java - Asynctask 不下载所有内容

java - 使用 Jackson 将 JSON 反序列化为 JPA 托管实体