我的应用程序在域级值对象之间使用了很多 OneToMany 和 OneToOne 引用,它们中的大多数是实体,要么是超类,要么是某物的子类。我想为我的应用程序提供一种一致(但简单)的保存方式这些实例和实际方法 save() 就是这样
@Transactional
public void save(Post post){
try{
JPA.em().persist(post);
}catch (EntityExistsException eee){
JPA.em().merge(post);
}catch(ConstraintViolationException cve){
JPA.em().refresh(post);
}
}
当前的问题是如何正确实例化这些对象以及在 cascadeType 中选择哪种策略,我想在保存具有与其他实体的引用的对象时保存嵌套对象,它现在可以工作但仅是第一次,之后我得到了Unique index or primary key violation
鉴于 SQL insert into Utente (passwd, DTYPE, username) values (?, 'Redattore', ?) [23505-168]
。显然我的 JPA 提供程序(hibernate 3.6.9)未能更新现有行,而是尝试在 DB 中插入新条目。以下是我正在使用的一些类:
@Entity
@Table
public class Post extends Domanda {
@Column(nullable = false)
private String nome;
@OneToMany(cascade = CascadeType.ALL)
private List<Commento> commenti;
@OneToMany(cascade = CascadeType.ALL)
private List<Risorsa> risorse;
@OneToOne(cascade = CascadeType.ALL)
private NodoApprendimento nodo;
@Column
private int visibilità;
@Column
private boolean isDraft;
Post 被几个类引用,其中 i 有:
@Entity
public abstract class Partecipante extends Utente{
@OneToMany(cascade = CascadeType.ALL,
fetch = FetchType.LAZY)
private Set<Post> contributi;
然后我想知道初始化和持久化或更新数据库中那些引用对象的正确方法,在此先感谢。