Нашли два представления одного и того же исключения из коллекции? - PullRequest
0 голосов
/ 13 сентября 2018

привет, у меня есть следующий код:

@Entity
public class VirtualMeasure extends AbstractMeasure implements Record {

@OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.REMOVE}, mappedBy 
= "virtualMeasureMyActionId.virtualMeasure")
@Access(AccessType.FIELD)
private Set<VirtualMeasureMyAction> vmMyAction;
}

@Entity
@AssociationOverrides({
    @AssociationOverride(name = "virtualMeasureMyActionId.virtualMeasure",         
joinColumns = @JoinColumn(name = "virtualMeasureId")),
    @AssociationOverride(name = "virtualMeasureMyActionId.myAction", 
joinColumns = @JoinColumn(name = "myActionId")) })
public class VirtualMeasureMyAction implements Record {

/**
 * virtualMeasureViewId : VirtualMeasureViewId
 */
@EmbeddedId
private VirtualMeasureMyActionId virtualMeasureMyActionId;
}


@Embeddable
public class VirtualMeasureMyActionId implements Record {

@ManyToOne(fetch=FetchType.LAZY)
private VirtualMeasure virtualMeasure;


@ManyToOne(fetch=FetchType.LAZY)
private MyAction myAction;
}

где я запускаю, я получаю эту ошибку [создать]: javax.persistence.PersistenceException: org.hibernate.HibernateException: найдено два представления одной коллекции: vmMyAction

Ответы [ 2 ]

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

Здесь для vmMyAction вы предоставляете @OneToMany(mappedBy) и @Access оба. Об этих двух представлениях, о которых гибернат говорит вам, в исключении. Hibernate не поддерживает оба сразу.

    @OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.REMOVE}, mappedBy 
    = "virtualMeasureMyActionId.virtualMeasure")
    @Access(AccessType.FIELD)
    private Set<VirtualMeasureMyAction> vmMyAction;

Поскольку согласно документации , @Access устарело для FIELD, попробуйте выше без аннотации @Access.

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

Проблема в том, что сеанс гибернации обнаруживает, что у вас есть одна и та же коллекция дважды в одном сеансе при сохранении.

Старайтесь не дублировать сеттеры и геттеры в ваших сущностях и используйте merge() intead of update().

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