Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Hibernate中保存表的子级_Java_Hibernate - Fatal编程技术网

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)