Java 如何在Hibernate中保存表的子级
我有三张桌子 客户、关系、地位 在我的Java 如何在Hibernate中保存表的子级,java,hibernate,Java,Hibernate,我有三张桌子 客户、关系、地位 在我的客户端实体中,我有 @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "relationId") private Relation relationId; 及 关系和状态实体只有getter/setter,没有关系 在这里,我正在保存/更新我的客户机,我想用它来保存/创建这个关系 Session session = sessionFactory.openSession(); try {
客户端
实体中,我有
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "relationId")
private Relation relationId;
及
关系和状态实体只有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();
}
此代码中没有异常,客户端
已成功保存,关系
已成功创建,但创建的关系ID
未分配给客户端表中的关系ID
列
使用此代码创建的关系具有关系ID
(primarykey:3)
但是在Client
中的relationId
列中,保存的值始终是0
,在这种情况下,它实际上应该是3
知道我做错了什么吗
是否可以在之后获取关系ID
这条线
session.saveOrUpdate(client.getRelationId());
这样我就可以获得
关系Id
,而不必去DB,只需将该Id保存在我的客户机表中?您可以尝试在@ManyToOne
注释中指定级联
参数:
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
它默认为没有级联操作。session.save(client.getRelationId());session.flush();在这里试过了,但没有运气commit
刷新会话并结束工作单元,如果flushmode未设置为manual yes,即使在提交之后,我也不会获得任何表的生成Id,因为我正在debugtry调用updatedClient.setRelationId(client.getRelationId())
我记不清了,因为我不久前在Hibernate中使用了MySql,但想必您可以用@Id@GeneratedValue(strategy=GenerationType.SEQUENCE,generator=“Country\u Id\u Seq”)
替换该问题前面提到的@Id@GeneratedValue(strategy=GenerationType.AUTO)
。仔细检查一下。它使用xxx.hbm.xml
映射文件,但这里也描述了与您一样的注释方法。@ManyToOne(fetch=FetchType.EAGER,cascade=CascadeType.ALL)@JoinColumn(name=“relationId”)private-relationId;:我这么做了,但是运气不好!
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)