Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA中的多级继承_Java_Jpa - Fatal编程技术网

Java JPA中的多级继承

Java JPA中的多级继承,java,jpa,Java,Jpa,我试图用JPA构建我的模型,但我面临一个问题,我找不到一个简单的解决方案。 好吧,假设我在数据库中存储电影、电视剧和电视剧。我有一个表存储这三种类型。现在我有一个带有这三种类型的鉴别器列。在java中,我有一个抽象类和电影,TVSerie和TVSeption扩展了这个类 我想能够检索电视元素(TVSerie和TVSeption)一次,例如与搜索请求。 我考虑过在TveElement类上使用第二个鉴别器列,如下所示: @Entity @Inheritance(strategy=Inheritanc

我试图用JPA构建我的模型,但我面临一个问题,我找不到一个简单的解决方案。 好吧,假设我在数据库中存储电影、电视剧和电视剧。我有一个表存储这三种类型。现在我有一个带有这三种类型的鉴别器列。在java中,我有一个抽象类和电影,TVSerie和TVSeption扩展了这个类

我想能够检索电视元素(TVSerie和TVSeption)一次,例如与搜索请求。 我考虑过在TveElement类上使用第二个鉴别器列,如下所示:

@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