Java Hibernate@MappedClass多态性

Java Hibernate@MappedClass多态性,java,hibernate,orm,mapping,Java,Hibernate,Orm,Mapping,假设我有这门课 @MappedSuperclass public abstract class A{...} 这个班呢 @Entity @Table public class B extends {...} 我能处理这件事吗 A aParent = serviceLayer.getSubClass(Long id) 或者像这样: List<A> listOfItems = serviceLayer.getSubClassAsList(); List listOfItems=s

假设我有这门课

@MappedSuperclass
public abstract class A{...}
这个班呢

@Entity
@Table
public class B extends {...}
我能处理这件事吗

A aParent = serviceLayer.getSubClass(Long id)
或者像这样:

List<A> listOfItems = serviceLayer.getSubClassAsList();
List listOfItems=serviceLayer.getSubassList();

这两种说法都有效吗?假设
getSubClass(Long id)
getSubassList
分别返回一个
B
和一个
列表

问题并不十分清楚,但您将无法对该超类进行查询,因为hibernate不知道对哪个表进行请求。这可以被认为是
@表
注释在您的子类
B
上,而不是超级类
A


换句话说:您将能够将结果实体B分配给变量a(java继承内容),但您将无法在HQL中编写类似的内容:
来自a…
,因为hibernate不知道要查询哪个表(ORM不代表
对象阅读思维(属于开发人员);))。

List listOfItems=serviceLayer.getSubassList()
不会编译,它与hibernate无关,而是与java中泛型的工作方式有关。如果B扩展A,列表不是扩展列表。工作是什么意思?您是否在问JPA提供者是否会使用映射的超类而不是具体的实体类来阻止您?另外,取决于
serviceLayer.getSubassList()的内容返回,您的第二个示例甚至可能无法编译。第一个示例如何?getSubClass方法将按原样工作。对于第二个试图获取列表的地方,它取决于如何在服务层上实现getSubassList方法。如果您需要,请按以下方式申报您的服务。公开名单