JPA 2.0 - 嵌入式ID,很多人没有持久

时间:2017-09-19 17:33:47

标签: hibernate jpa-2.0

我有2个实体(下面是简化版):

@Entity
Client
@Id protected String id;

@OneToMany(mappedBy = "sender", cascade = CascadeType.ALL)
protected List<Message> sentMessages = new ArrayList<>();

@Embeddable
MessagePK
@ManyToOne(/*cascade = CascadeType.ALL*/)
protected Client sender;
protected LocalDate dateTime;

@Entity
Message
@EmbeddedId protected MessagePK id;
@Column protected String message;

当我尝试持久化Message时,它会抱怨客户端是一个瞬态实例。

所以,我尝试在那里进行级联操作,但这也没有用(现在已经注释掉了)。

我似乎无法弄明白。

1 个答案:

答案 0 :(得分:2)

你不能在@Embeddable中建立关系(比如@ManyToOne)。 因为可嵌入对象没有自己的标识(缺少主键),所以它只需要作为封装它的实体的一部分来处理。从数据库的角度来看,嵌入对象与其余实体属性一起存储在一行中。

您可以使用@IdClass批注创建复合键发件人/日期时间 见:https://wiki.eclipse.org/EclipseLink/Examples/JPA/2.0/DerivedIdentifiers