【发布时间】: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)
但是在Client 的relationId 列中,保存的值始终是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映射文件,但那里也描述了与您一样的注释方法。