Java 混合联接表和单表继承以及对所有对象的查询

Java 混合联接表和单表继承以及对所有对象的查询,java,hibernate,inheritance,jpa,hibernate-mapping,Java,Hibernate,Inheritance,Jpa,Hibernate Mapping,我有一个webapp正在使用以下配置(我更改了实体名称): 所以我有两张桌子:动物和哺乳动物。 这个配置正在工作,除非我不完全理解如何工作。 在哺乳动物中,继承类型从联接表更改为单_表,因此猫和狗存储在通过哺乳动物_id列联接到动物表的哺乳动物表中 问题是不可能以多态方式检索哺乳动物(猫或狗): Mammal mammal = (Mammal) hibernateTemplate.get(Mammal.class, id); 或一个哺乳动物(狗和猫)列表,其中包含一个冬眠查询: List<

我有一个webapp正在使用以下配置(我更改了实体名称):

所以我有两张桌子:动物和哺乳动物。 这个配置正在工作,除非我不完全理解如何工作。 在哺乳动物中,继承类型从联接表更改为单_表,因此猫和狗存储在通过哺乳动物_id列联接到动物表的哺乳动物表中

问题是不可能以多态方式检索哺乳动物(猫或狗):

Mammal mammal = (Mammal) hibernateTemplate.get(Mammal.class, id);
或一个哺乳动物(狗和猫)列表,其中包含一个冬眠查询:

List<Mammal> list = (List<Mammal>) hibernateTemplate.find("from Mammal");
总之,我想让webapp保持同样的工作方式(两个表:动物和哺乳动物),但同时能够进行多态查询:通过一个查询检索哺乳动物(猫和狗)的列表

我希望我说得够清楚,并提前感谢您的帮助

另一种尝试:

“涉及下表的外键循环依赖关系:”


您是否尝试了hibernateTemplate.find(“来自哺乳动物”)

您的
find
查询需要使用JPA实体而不是表名


顺便说一句,表通常以单数命名-这通常会使复杂查询的阅读效果更好-例如,
其中chicken.id=egg.id

谢谢,我修复了查询,这只是一个示例。这是一个工作的webapp,数据模型完成了。实际上,我更改了实体名称以使示例更容易理解(我希望如此)。您是如何解决这个问题的?
List<Mammal> list = (List<Mammal>) hibernateTemplate.find("from Mammal");
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "animals")
public abstract class Animal { ...

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Table(name = "mammals")
@PrimaryKeyJoinColumn(name = "mammal_id")
@DiscriminatorColumn(name = "type")
public abstract class Mammal extends Animal { ...

@Entity
@DiscriminatorValue(value = "dog")
public class Dog extends Mammal { ...

@Entity
@DiscriminatorValue(value = "cat")
public class Cat extends Mammal { ...
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "animals")
public abstract class Animal { ...

@Entity
@Table(name = "mammals")
@PrimaryKeyJoinColumn(name = "mammal_id")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type")
public abstract class Mammal extends Animal { ...

@Entity
@Table(name = "mammals")
@DiscriminatorValue(value = "dog")
public class Dog extends Mammal { ...

@Entity
@Table(name = "mammals")
@DiscriminatorValue(value = "cat")
public class Cat extends Mammal { ...