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方法。如果您需要,请按以下方式申报您的服务。公开名单