Tudo bom pessoal,
Estou batendo a cabeça um tempo aqui com um pequeno problema.
Tenho três entidades: Order, User, ProductRelease
A entidade Order tem uma propriedade User que é anotada conforme segue:
@ManyToOne
private User user;
e tem uma propriedade orderedItems que é anotada da seguinte forma:
@ManyToMany(fetch = FetchType.EAGER)
@Cascade({ org.hibernate.annotations.CascadeType.DELETE_ORPHAN,
org.hibernate.annotations.CascadeType.ALL })
@JoinTable(joinColumns = {
@JoinColumn(name = "ProductRelease_date", referencedColumnName = "date"),
@JoinColumn(name = "ProductRelease_product_id", referencedColumnName = "product_id") })
private List<ProductRelease> orderItems;
Na aplicação crio um objeto order e armazeno-o na HTTP-Session, após o usuário confirmar o checkout faço a gravação do objeto utilizando GenericDao.save() (que basicamente faz save para novas entidades e update para as quais já existem).
O fato é que quando persisto o Order object, ele faz um cascade e tenta salvar o usuário e os orderItems, mas não quero isso.
Se remover o cascade da propriedade orderItems ele não salvará as relações na tabela associativa de Order para ProductRelease, existe uma forma de fazer com que ele salve as associações mas sem cascatear a persistencia para os objetos contidos em orderItems? Uma vez que cascateando e sendo que os objetos estão desatachados ele falará que já existe um objeto com o mesmo id na Hibernate Session.
A mesma coisa gostaria de aplicar para o usuário, somente utilizar o id sem cascatear a persistência.
Detalhe: as duas relações são unidirecionais.
Agradeço se puderem dar sugestões para resolver o problema
Obrigado
Francisco