是否可以在2个对象之间建立@OneToOne关系,但不能让子进程在Hibernate中自动保留

时间:2010-11-29 22:26:54

标签: java hibernate entity-relationship

我正在使用jpa持久性注释。我有2个对象,Order(父)和Transaction(子)。我希望能够获取我的oder并获得其交易。问题是我不想在保存订单时自动保存我的交易。在我保存之前,我需要对它进行一些特殊的处理。

有没有办法告诉hybernate不要保留子对象但是在我检索命令时仍然会获取它?

我试过这样的事情

@OneToOne(cascade=CascadeType.REFRESH)
@JoinColumn(name = "commande_id", insertable=false, updatable=false)

这不起作用。我一直收到这条消息:

  

对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例

当我尝试保存订单对象时。第一次保存订单时,事务对象包含一些数据但尚未准备好保存。

提前致谢

2 个答案:

答案 0 :(得分:1)

您可以使关系双向并由交易方控制。

这样的东西
class Order {
  @OneToOne(mappedBy="order", cascade={}, insertable=false, updatable=false)
  private Transaction transaction;
}

class Transaction {
  @OneToOne(name = "order_fk")
  private Order order;
}

如果以这种方式执行,则order.transaction对数据库没有写入影响。 但即使它有效,我相信它是一个黑客。

答案 1 :(得分:1)

如果您从会话中分离交易怎么办?

session.evict(transaction);

不确定这是否有效但只是一个想法。