Hibernate JPA 2.0-嵌入Id,多工单未持久化

Hibernate JPA 2.0-嵌入Id,多工单未持久化,hibernate,jpa-2.0,Hibernate,Jpa 2.0,我有2个实体(简化版如下): @实体 客户 @Id受保护的字符串Id; @OneToMany(mappedBy=“sender”,cascade=CascadeType.ALL) 受保护的列表sentMessages=new ArrayList(); @可嵌入 MessagePK @多通(/*cascade=CascadeType.ALL*/) 受保护的客户端发送方; 受保护的本地日期时间; @实体 消息 @EmbeddedId保护MessagePK id; @列保护字符串消息; 当我试图持久

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

@实体
客户
@Id受保护的字符串Id;
@OneToMany(mappedBy=“sender”,cascade=CascadeType.ALL)
受保护的列表sentMessages=new ArrayList();
@可嵌入
MessagePK
@多通(/*cascade=CascadeType.ALL*/)
受保护的客户端发送方;
受保护的本地日期时间;
@实体
消息
@EmbeddedId保护MessagePK id;
@列保护字符串消息;
当我试图持久化消息时,它会抱怨客户机是一个临时实例

所以,我试着在那里放置一个级联操作,但也没有成功(现在被注释掉了)


我似乎无法理解。

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

您可以使用@IdClass注释来创建复合密钥sender/datetime
请参阅:

但是,既然我使用@EmbeddedId,那么它不是本例中的标识吗?如果不是的话,这有什么意义EmbeddedId@EmbeddedId应用于实体类或映射超类的持久字段或属性,以表示可嵌入类的复合主键。可嵌入类必须被注释为可嵌入的。谢谢-我开始研究@IdClass,并认为这可能是方向。
@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;