问题
选择MappedSuperclass我有一个@MappedSuperclass
称为数据为每一个实体在我的数据库中的父母。它包含像Id等通用属性。然后,我有一个实体,扩展数据,这也是由于其子类的通用功能,也是一个@MappedSuperclass
。我的数据库中的映射是正确的。从数据库(休眠)
这里是我的层次
@MappedSuperclass Data | @MappedSuperclass +- Employee | | @Entity | +- FullTimeEmployee | | @Entity | +- PartTimeEmployee | @Entity +- Store
的例子,该表是正确映射:
FullTimeEmployee PartTimeEmployee Store
反正有没有在数据库中查询所有员工子类(FullTimeEmployee,PartTimeEmployee)的情况下,雇员没有引用查询中的子类名称?
喜欢的东西
List<Employee> allEmployees = getAllEmployees();
的想法是,每当我决定创建一个员工(即AllDayEmployee)的另一个子我不会有更改查询到包括名称。
解决方案
所以,Gregory正确地指出,这是不可能的@MappedSuperclass
。所以我将它改为@Entity,因为我想为每个子类保留一张表,我使用了InheritanceType.JOINED
。
所以上面的层次,现在是
@MappedSuperclass Data | @Entity | @Inheritance(strategy=InheritanceType.JOINED) +- Employee | | @Entity | +- FullTimeEmployee | | @Entity | +- PartTimeEmployee | @Entity +- Store
以及表依然:
FullTimeEmployee PartTimeEmployee Store
所以,现在,让所有的员工我只需拨打:
entityManager.createQuery("from Employee").getResultList();
如果我需要FullTimeEmployee和PartTimeEmployee(我使用的是Oracle两种不同的'@ SequenceGenerator'序列)?作为一个实体我必须在Employee类中指定'@ Id'。 – drakyoko 2016-10-06 15:30:44