org.hibernate.PersistentObjectException:在使用hashMap持久化对象时传递到持



我有一个类通知,其中包含一个对象信使数据:

public class Notification{
@OneToOne(mappedBy = "messengerDataId")
private MessengerData messengerData;
...
}

MessengerData 类包含一个资源映射,这意味着 messengerdata 包含这样一对多关系的原因:

public class MessengerData{
@OneToOne(mappedBy = "messengerData")
private Notification notification;
@OneToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.REMOVE },
fetch = FetchType.EAGER)
@Cascade({ org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.DETACH })
@JoinTable(name = HemisTablesNames.MESSENGER_RESOURCES, joinColumns = @JoinColumn(name = "idResource"),
inverseJoinColumns = @JoinColumn(name = "messengerDataId"))
private Map<String, Resource> resources = new HashMap<String, Resource>();
...

类 Resource 包含一个映射<字符串、通知文本数据>:

@OneToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.REMOVE },
fetch = FetchType.EAGER)
@Cascade({ org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.DETACH })
@JoinTable(name = HemisTablesNames.MESSENGER_NOTIF_TEXT_DATA, joinColumns = @JoinColumn(name = "idNTD"),
inverseJoinColumns = @JoinColumn(name = "idResource"))
private Map<String, NotificationTextData> textDatas;

这是我保存对象的方式:

EntityManager.persist(notification);
EntityManager.commitTransaction();

我的问题是我收到此异常:

无法保存通知:org.hibernate.PersistentObjectException: 传递给 PERSISTED 的分离实体:com.ubiant.hemis.type.Notification

有人可以帮助我吗?

尝试使用这样的东西:

@ElementCollection(targetClass = String.class)
@CollectionTable(name = "MAP")
@MapKeyColumn(name="key")
@Column(name="value")
private Map<String, String> map;

您正在尝试在没有一些引用的情况下保留对象。也许那是你的问题。

如果实例化通知,则无法使用persist,因为生成的对象未附加到休眠会话。您应该使用merge而不是persist

最新更新