Java JPA中的多级继承
我试图用JPA构建我的模型,但我面临一个问题,我找不到一个简单的解决方案。 好吧,假设我在数据库中存储电影、电视剧和电视剧。我有一个表存储这三种类型。现在我有一个带有这三种类型的鉴别器列。在java中,我有一个抽象类和电影,TVSerie和TVSeption扩展了这个类 我想能够检索电视元素(TVSerie和TVSeption)一次,例如与搜索请求。 我考虑过在TveElement类上使用第二个鉴别器列,如下所示:Java JPA中的多级继承,java,jpa,Java,Jpa,我试图用JPA构建我的模型,但我面临一个问题,我找不到一个简单的解决方案。 好吧,假设我在数据库中存储电影、电视剧和电视剧。我有一个表存储这三种类型。现在我有一个带有这三种类型的鉴别器列。在java中,我有一个抽象类和电影,TVSerie和TVSeption扩展了这个类 我想能够检索电视元素(TVSerie和TVSeption)一次,例如与搜索请求。 我考虑过在TveElement类上使用第二个鉴别器列,如下所示: @Entity @Inheritance(strategy=Inheritanc
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="type")
public abstract class Element{
...
}
@Entity
@DiscriminatorValue("tv")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="subtype")
public class TVElement extends Element{
...
}
@Entity
@DiscriminatorValue("episode")
public class TVEpisode extends TVElement{
...
}
然而,这个解决方案似乎不起作用
在jpa中实现2级继承的最佳方式是什么
谢谢您显然不需要子类上的第二个
@DiscriminatorColumn
TVElement不是抽象的,所以hql中类似这样的内容应该可以
from TVElement tvElement where ...
它还应该获取子类型。您的类应该与以下内容类似:
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="type")
@Polymorphism(type = PolymorphismType.IMPLICIT)
@MappedSuperClass
public abstract class Element{
...
}
@Entity
@DiscriminatorValue("tv")
public class TVElement extends Element{
...
}
@Entity
@DiscriminatorValue("episode")
public class TVEpisode extends TVElement{
...
}
如果没有鉴别器列,我不知道如何检索子类型。“来自TVElement TVElement…”的请求只提供TVElement。如果我删除父类上的@DiscriminatorValue(name=“subtype”),那么@DiscriminatorValue(“插曲”)一行也是毫无意义的。你的JPA提供者是什么?太棒了!我误解了jpa是在获取儿童类的鉴别器值。我不认为@polymorphic(type=PolymorphismType.IMPLICIT)和@MappedSuperClass是必需的。默认值是PolymorphismType.IMPLICIT,您可以放心地忽略它,但我建议您使用MappedSuperClass。看看API javadocs