Мои сущности:
@Entity
public class Document {
@Id
protected String id; //It string in purpose
@OneToOne(cascade = ALL)
@JoinColumn(name = "DOCUMENT_DETAILS")
private DocumentDetails details;
}
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "documentDiscr")
@EqualsAndHashCode
public abstract class DocumentDetails {
@Id @GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
private Money total;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "SELLER_ID")
private Company seller;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "BUYER_ID")
private Company buyer;
}
@Entity
public class Company {
@Id
protected String id;
private String name;
private String phoneNumber;
private String email;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "address_id")
private Address address;
}
@Entity
@EqualsAndHashCode
public class Address {
@Id
@GeneratedValue(strategy= GenerationType.SEQUENCE)
private Long id;
private String country;
private String city;
private String postalCode;
private String streetName;
private String streetNumber;
private String apartmentNumber;
}
@Path("path")
@Transactional
public class MyResource {
@Inject
MyRepo myRepo;
@PUT
public Document updateDoc(Document document){
myRepo.update(document);
}
}
public class Repo<T extends MyClass> implements MyRepo<T> {
@PersistenceContext
protected EntityManager entityManager;
public T create(T t) {
t.generateId();
this.entityManager.persist(t);
return t;
}
public T update(T entity) {
return entityManager.merge(entity);
}
}
Когда я вызываю entityManage.update(documentEntity) и в качестве поставщика и покупателя добавляется одна и та же компания, я вижу 'Multiple representations of the same entity'
.
Я прочитал это, но ничего не помогает. Когда я удалил CascadeType.All, я получаю
'detached entity passed to persist: my.pckg.Address'
Я также пытался удалить CascadeType.Merge, но ошибка та же. Что я могу сделать? Где моя ошибка?
ОБНОВЛЕНИЕ
Сначала я изменил @ManyToOne(Cascade.All)
на @ManyToOne()
в DocumentDetails
Во-вторых, я изменил @ManyToOne(Cascade.All)
на @ManyToOne(Cascade.Merge)
в DocumentDetails
.
В-третьих, я изменил @ManyToOne(Cascade.All)
на @ManyToOne(all types except all and merge)
в DocumentDetails
.
Я также пробовал то же самое с классом Address
Hibernate 5.2.6.FINAL
ничего не меняется - person Krzysiek   schedule 28.01.2017@EqualsAndHashCode
из сущностей. - person Dherik   schedule 28.01.2017