我有以下实体:
@Entity
@Inheritance
@DiscriminatorColumn(name = "TYPE")
@DiscriminatorValue("Company")
public class Company {
... (lot of attributes)
}
@Entity
@DiscriminatorValue("Company")
public class LargeCompany extends Company {
... (a few not required attributes)
}
公司实体位于一个单独的项目中,应该是可扩展的(通常只是一个子类)。
默认情况下,当我使用@Inheritance 时,JPA 只创建一个包含 Company 和所有子类的所有属性的表。为了分离所有这些不同类型的实例,JPA 使用 @DiscriminatorValue ,每个类通常都不同。
我意识到如果我对两个类(实体)使用相同的 @DiscriminatorValue 不会引起问题。这将使它更容易使用:
分离项目可以负责创建公司并存储它们(UI、验证等)。在下一步中,我的项目可以加载这些公司,而无需额外的步骤,我将获得 LargeCompany 对象。
我通过几个集成测试验证了它是否有效(当 entityManager 被清除时),但我不确定我是否真的可以依赖那个“功能”?可能有更好的方法吗?
顺便提一句。我正在使用休眠 4.2.0
工作测试之一:
@Test
public void test() {
Company company = new Company("TEST");
em.persist(company);
em.flush();
em.clear(); // required!!
company = em.createQuery("from Company").getFirstResult();
assertEquals(LargeCompany.class, company.getClass());
}