Java JPA@实体继承

Java JPA@实体继承,java,hibernate,inheritance,jpa,persistence,Java,Hibernate,Inheritance,Jpa,Persistence,我研究JPA/Hibernate@Entity继承已经有一段时间了,似乎找不到任何能够解决我试图实现的目标的东西 基本上,我希望能够根据需要定义一个具有所有列和表映射的@实体。然后,我希望能够使用每个“子实体”主体中定义的不同的@Transient方法集,在多个不同的位置扩展@Entity。这是一个基本的例子,说明我正在努力实现的目标,但迄今为止没有成功: @Entity @Table(name = "mountain") public class MountainEntityBase impl

我研究JPA/Hibernate
@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; }

}    

提前感谢您的帮助。

JPA中的继承是使用
@heritation
注释在根实体上指定的。您可以在其中指定层次结构的数据库表示形式。查看更多详细信息


如果您的子类只定义临时字段(而不是方法)(即不保存在db中),那么可能最好使用鉴别器列。但在这种情况下,您可能并不真正需要继承—主实体可以拥有所有方法(因为它拥有所有方法操作的字段)

我不明白您想要做什么。在JPA中,只有字段被序列化,而不是方法。只有字段可以声明为transcent:这个关键字对方法没有影响。你好,谢谢你的回复,也很抱歉造成混淆:P我试图澄清我原来的帖子。所以基本上,在实现实际的瞬态之前,我想对实体的继承方面进行排序。所以即使child类是空的,我似乎也不能使用它。我不断得到实体未映射的错误。再次感谢,谢谢你的回复。我更感兴趣的是继承方面,而不是第一次使用瞬态。基本上,我还想满足儿童班也是空的情况。(见原文[已编辑])。是否可以使用继承注释执行此操作?再次感谢是的,这是可能的。您只需指定一个鉴别器值。我链接了文档-这是必读的;)有没有一种方法可以在不向数据库中的每个表中添加新列的情况下执行此操作?我认为不应该有许多不添加任何字段的表用于继承。它可以全部放在一个表中(带有一个附加的鉴别器列),hibernate需要有一个标准来实例化一个子类或另一个子类。如果没有discriminator字段,hibernate就无法知道您想要许多子类中的哪一个(甚至-您想要基类还是子类)
@Entity
public class MountainEntity extends MountainEntityBase implements Serializable {

    public List<MountainEntity> allMountainsExploredBy = new ArrayList<MountainEntity>();

    @Transient
    public List<MountianEntity> getAllMountainsExploredBy(String explorerName){
        // Implementation 
    }
}
@Entity
public class MountainEntity extends MountainEntityBase implements Serializable {
}