Java JPA:许多其他实体类使用的公共实体

Java JPA:许多其他实体类使用的公共实体,java,hibernate,jpa,Java,Hibernate,Jpa,我在其他SO问题中搜索了很多次,但运气不佳,可能是因为我使用了不正确的搜索词 我想创建一个实体注释,可以附加到继承树中的任何其他实体 例如: 我知道我可以做到以下几点: @Entity class Note extends AbstractEntity { String title String message; } @Entity class EntityOne extends AbstractEntity { List<Note> notes; } @

我在其他SO问题中搜索了很多次,但运气不佳,可能是因为我使用了不正确的搜索词

我想创建一个实体注释,可以附加到继承树中的任何其他实体

例如:

我知道我可以做到以下几点:

@Entity
class Note extends AbstractEntity {
    String title
    String message;
}

@Entity
class EntityOne extends AbstractEntity {
    List<Note> notes;
}

@Entity
class EntityTwo extends AbstractEntity {
    List<Note> notes;
}
如果我们希望向实体添加注释支持,则需要我更新实体

出于某种原因,有这样一张桌子感觉更好:

Note - ID, title, message, relatedItem_ID, relatedItem_DTYPE
我甚至不介意多加一张桌子:

Note - ID, title, message
AbstractEntity_Note - relatedItem_ID, relatedItem_DTYPE, note_ID

想法?

这取决于你有多少相关的条目类型,如果它们很少,例如2,你可以使用这样的方法

@Entity
class Note extends AbstractEntity{
public String title
public String message;
@ManyToOne
EntityOne e1;
@ManyToOne
EntityTwo e2;
}
如果希望在实体类中引用注释,只需添加一个字段来跟踪反向关系

您将学习以下课程:

@Entity
public class EntityOne{
...
@OneToMany(mappedBy="e1")
public List<Note> notes;
}

@Entity
public class EntityTwo{
...
@OneToMany(mappedBy="e2")
public List<Note> notes;
}
或者您可以尝试使用InheritanceType.TABLE_PER_类创建继承,并查看Hibernate如何处理:D。
顺便说一句,请记住,仅保存夫妇relatedItem\u ID、relatedItem\u DTYPE意味着一张便笺只能属于某一特定类型的一个实例。

我认为这里有一个问题。如果我理解正确,您希望在其他表格的信息中附加注释。然后,您希望对所有表重用注释。我相信,如果我错了,请纠正我,EntityOne注释与EntityTwo注释是不同的,这意味着它们应该存储在不同的表中。在不同的场景中,您可以将EntityOne和EntityTwo关联到同一个用户表,例如在本例中,用户到处都是用户,但一个表的注释与另一个表的注释不同,因为它们具有相同的结构。我不确定它们是否不同。以一篇文章为例。所有的帖子都是一样的,除了上面写了什么。一根柱子,它可以贴在任何东西上。这基本上就是我想要建模的。好吧,建模的时候没有对错。我的用户示例遵循您的建模思想。我相信笔记模型也会起作用。当更多的表加入聚会,需要在这些新表上附加更多的注释时,我会感到担心。您可能需要在一个表中记录注释的额外信息。然后,您将添加一个额外的列,其他注释不需要打破规范化规则,这是上帝知道的。我对你们的要求一无所知,我可能只是在这里说些废话
@Entity
class Note extends AbstractEntity{
public String title
public String message;
@ManyToOne
EntityOne e1;
@ManyToOne
EntityTwo e2;
}
@Entity
public class EntityOne{
...
@OneToMany(mappedBy="e1")
public List<Note> notes;
}

@Entity
public class EntityTwo{
...
@OneToMany(mappedBy="e2")
public List<Note> notes;
}