簡體   English   中英

僅帶有 id 的 HIbernate 持久對象

[英]HIbernate persist object only with id

我有以下實體:

@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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM