我有以下实体:
@Entity
@Table(name = "comprobante_pago")
public class ComprobantePago implements Serializable {
private Integer id;
private String serie;
private SocioNegocio emisor;
private Usuario usuario;
@Id
@Column(name = "id")
@SequenceGenerator(name = "seq", sequenceName = "comprobante_pago_id_seq",allocationSize=1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq")
public Integer getId() {
return id;
}
@Column(name = "serie")
public String getSerie() {
return serie;
}
public void setSerie(String serie) {
this.serie = serie;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_emisor")
public SocioNegocio getEmisor() {
return emisor;
}
public void setEmisor(SocioNegocio emisor) {
this.emisor = emisor;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_usuario")
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
}
我想通过以下方式保留 ComprobantePago 对象:
ComprobantePago cp = new ComprobantePago();
cp.setSerie("0001");
SocioNegocio emisor = new SocioNegocio();
emisor.setId(2);
Usuario usuario = new Usuario();
usuario.seId(10);
cp.setEmisor(emisor);
cp.setUsuario(usuario);
//persist the object
comprobantePagoDAO.crearComprobantePago(cp);
usuario(10) 和 emisor(2) 的 id 保留在各自的实体中,我这样做是因为我只有实体的 id。
在另一个类中,我有保存实体的方法
public class ComprobantePagoDAOImpl implements ComprobantePagoDAO {
private SessionFactory sessionFactory;
@Override
public void crearComprobantePago(ComprobantePago comprobante) {
sessionFactory.getCurrentSession().save(comprobante);
}
....
}
感谢大家。
最佳答案
当您真正想要做的是将新实体与数据库中存在的持久的托管实体链接时,不要创建仅具有 ID 的新的分离实体。
使用EntityManager.getReference()
相反,从其 ID 获取持久的托管实体。或者 Hibernate API 中的等效项:Session.load()
.
关于java - HIbernate 仅保留带有 id 的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32662073/