![](/img/trans.png)
[英]Hibernate: org.hibernate.PersistentObjectException: detached entity passed to persist
[英]org.hibernate.PersistentObjectException: detached entity passed to persist while using hashMap to persist objects
我有一个Notification类,其中包含一个对象messengerData:
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类包含一个map <String,NotificationTextData>:
@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:传递给持久对象的分离实体: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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.