我有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时,它会抱怨客户端是一个瞬态实例。
所以,我尝试在那里进行级联操作,但这也没有用(现在已经注释掉了)。
我似乎无法弄明白。
答案 0 :(得分:2)
你不能在@Embeddable中建立关系(比如@ManyToOne)。 因为可嵌入对象没有自己的标识(缺少主键),所以它只需要作为封装它的实体的一部分来处理。从数据库的角度来看,嵌入对象与其余实体属性一起存储在一行中。
您可以使用@IdClass批注创建复合键发件人/日期时间 见:https://wiki.eclipse.org/EclipseLink/Examples/JPA/2.0/DerivedIdentifiers