簡體   English   中英

org.hibernate.PersistentObjectException:在使用hashMap持久化對象時傳遞的持久化分離實體

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM