2011-10-05 70 views
0

我有两个分类。第一堂课是TNota。EclipseLink中的CASCADETYPE JPA

@Entity 
@Table(name = "t_nota") 
public class TNota implements Serializable {  
@Id 
@SequenceGenerator(name="seq_t_nota", sequenceName="seq_t_nota", initialValue=37, allocationSize=1) 
@GeneratedValue(generator="seq_t_nota") 
@Basic(optional = false) 
@Column(name = "id_nota", nullable = false) 
private double idNota; 

@Basic(optional = false) 
@Column(name = "nota", nullable = false, length = 255) 
private String nota; 

@JoinColumn(name = "id_tipo_nota", referencedColumnName = "id", nullable = false) 
@ManyToOne(optional = false) 
private NTipoNota nTipoNota; 

public TNota() { 
} 

public TNota(Long idNota) { 
    this.idNota = idNota; 
} 

public double getIdNota() { 
    return idNota; 
} 

public void setIdNota(double idNota) { 
    this.idNota = idNota; 
} 

public String getNota() { 
    return nota; 
} 

public void setNota(String nota) { 
    this.nota = nota; 
} 

public NTipoNota getNTipoNota() { 
    return nTipoNota; 
} 

public void setNTipoNota(NTipoNota nTipoNota) { 
    this.nTipoNota = nTipoNota; 
} 
} 

和其他类NtipoNota ..

@Entity 
@Table(name = "n_tipo_nota") 
public class NTipoNota implements Serializable { 
@Id 
@Basic(optional = false) 
@Column(name = "id", nullable = false) 
private Integer id; 
@Basic(optional = false) 
@Column(name = "nombre", nullable = false, length = 255) 
private String nombre; 
@OneToMany(cascade = CascadeType.ALL, mappedBy = "nTipoNota",fetch=FetchType.LAZY) 
private List<TNota> tNotaList; 

public NTipoNota() { 
} 

public NTipoNota(Integer id) { 
    this.id = id; 
} 

public Integer getId() { 
    return id; 
} 

public void setId(Integer id) { 
    this.id = id; 
} 

public String getNombre() { 
    return nombre; 
} 

public void setNombre(String nombre) { 
    this.nombre = nombre; 
}  

public List<TNota> getTNotaList() { 
    return tNotaList; 
} 

public void setTNotaList(List<TNota> tNotaList) { 
    this.tNotaList = tNotaList; 
} 
} 

我拥有所有类型的存储在数据库中的笔记。我只是想坚持一个新的TNota如下,但我得到一个错误,因为它坚持一个新的NTipoNota与id = 5已经存在于数据库中。使用的TopLink我从未有过这样的烦恼:

TNota note = new TNota(); 
note.setNota("Hola mundo"); 
note.setNTipoNota(new NTipoNota(5)); 
manager.persist(note); 

我确定如下:

TNota note = new TNota(); 
note.setNota("Hola mundo"); 
note.setNTipoNota(manager.find(NTipoNota.class, 5); 
manager.persist(note); 

我想不会有所有代码变化,由于这个问题。有什么形式可以让我们在创建对象的新实例时不会坚持对象?

谢谢大家。

回答

1

你的新代码是正确的,而你以前的代码是不正确的。您也可以调用合并来解决关系。