java - HIbernate 仅保留带有 id 的对象

标签 java hibernate

我有以下实体:

@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/

相关文章:

java - 在 Android Studio 中获取列表时,从 Parse 获取列表而不自动选择

java - Hibernate - 唯一键作为外键

java - H2内存数据库和自定义@GenericGenerator策略

java - 如果绘制 JOptionPane,则不会绘制我的面板的组件

java - 将值设置为模拟对象但得到 null

java - 生成某些实例变量的列表

java - 电话键盘格式的字母到数字转换器

java - 如何为我的 Spring 3/Hibernate 4 LocalSessionFactoryBean 设置事件监听器?

java - joda.time.DateTime.toLocalDateTime() NoSuchMethodError

java - 具有计数条件的 Hibernate 条件