我曾经在其他网站(和这里)问过几次,但我想我会再试一次,因为我真的没有找到答案。我不熟悉hibernate,我害怕在hibernate的论坛上发帖。我主要使用带有Hibernate 3.6的JPA注释。
我有以下架构:
所以基本上这是一个遗留数据库。提名是中心表,我有4种特定类型的提名:
所以我所做的就是使用鉴别器(和继承)来建立它们的实体。例如:
这是实体提名:
@Entity(name = "Nomination")
@Table(name = "NOMINATION")
@DiscriminatorColumn(name="CATEGORY_CODE", discriminatorType = DiscriminatorType.STRING, length = 1)
@Inheritance(strategy=InheritanceType.JOINED)
public abstract class Nomination extends AuditableEntity {
以下是我对团队,理念和成功实体的编码方式:
@Entity(name = "TeamNom")
@Table(name = "TEAM_NOM")
@DiscriminatorValue("T")
@PrimaryKeyJoinColumn(name = "NOM_ID")
public class TeamNom extends Nomination {
现在对于Coworker我做了以下事情:
@Entity(name = "CoworkerNom")
@DiscriminatorValue("C")
@PrimaryKeyJoinColumn(name = "NOM_ID")
public class CoworkerNom extends Nomination {
你可以看到我有一个大问题。 Hibernate正在寻找一个名为“CoworkerNom”的表,但我的数据库中没有任何表。我已经尝试将“提名”作为表格,因为我没有想法,但逻辑上它给了我循环依赖性错误。
那么我如何处理没有表格和没有属性的实体呢?其他实体显然工作正常。
答案 0 :(得分:1)
在hibernate中你将不得不创建一个包含每个提名子类属性的表,所以你将在实践中使用这个表只填充ID ...我认为这背后的基本原理是这样的你具有以下优点:如果您希望将来使用特定属性扩展此子类,则可以在不需要更多注释或架构更改的情况下执行此操作。