【问题标题】:How to save children of a table in Hibernate如何在休眠中保存表的孩子
【发布时间】:2012-11-22 11:26:52
【问题描述】:

我有三张桌子

客户、关系、状态

在我的Client 实体中,我有

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "relationId")
private Relation relationId;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "statusId")
private Status statusId;

关系和状态实体只有getter/setter,没有关系。

我在这里保存/更新我的客户,我也想保存/创建这个关系

Session session = sessionFactory.openSession();

try
{

    Transaction tr = session.beginTransaction();
    updatedClient = (Client) session.get(Client.class, id);
    updatedClient.setClientPostCode(client.getClientPostCode());
    updatedClient.setRelationId(client.getRelationId());

    session.saveOrUpdate(client.getRelationId());
    session.update(updatedClient);
    tr.commit();
}

这段代码也不例外,Client保存成功,Relation创建成功但是创建的relationID没有赋值给Client表中的relationID列。

使用此代码创建的关系具有relationID(primarykey: 3) 但是在ClientrelationId 列中,保存的值始终是0,在这种情况下实际上应该是3

知道我做错了什么吗?

难道不能在之后得到relationId 这条线?

session.saveOrUpdate(client.getRelationId());

这样我就可以获得relationId 而无需进入数据库,只需将该ID 保存在我的Client 表中?

【问题讨论】:

  • session.save(client.getRelationId()); session.flush();在这里尝试过,但没有运气!
  • commit 刷新会话并结束工作单元,如果刷新模式未设置为手动 FlushMode
  • 是的,即使在提交之后,我也没有得到任何表的生成 ID,因为我正在调试中观看
  • 尝试在session.saveOrUpdate(client.getRelationId());之后调用updatedClient.setRelationId(client.getRelationId());
  • 我记错了,因为我之前使用了 MySql 和 Hibernate,但大概可以用@Id @GeneratedValue(strategy=GenerationType.AUTO) 替换该问题的accepted answer 中提到的@Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="Country_Id_Seq")。只需仔细阅读即可。它使用xxx.hbm.xml 映射文件,但那里也描述了与您一样的注释方法。

标签: java hibernate


【解决方案1】:

您可以尝试在 @ManyToOne 注释中指定 cascade 参数:

@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)

默认没有级联操作。

【讨论】:

  • @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL) @JoinColumn(name = "relationId") private Relation relationshipId; :做到了,但没有运气!
猜你喜欢
  • 1970-01-01
  • 2013-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多