org.hibernate.PersistentObjectException: отдельная сущность передана для сохранения при использовании hashMap для сохранения объектов - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть класс 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 содержит карту :

    @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

Может ли кто-нибудь помочь мне с этим?

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Если вы создаете экземпляр уведомления, вы не можете использовать persist, поскольку созданный объект не присоединен к сеансу гибернации.Вы должны использовать merge вместо persist

0 голосов
/ 26 сентября 2018

попробуйте использовать что-то вроде этого:

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

Вы пытаетесь сохранить объект без каких-либо ссылок.Может быть, это твоя проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...