Java 如何防止插入时不必要的选择?
我有以下场景(在Java/Hibernate中):Java 如何防止插入时不必要的选择?,java,hibernate,many-to-one,Java,Hibernate,Many To One,我有以下场景(在Java/Hibernate中): 我有两个实体类:X和Y。X与Y有一个@manytone关联,它不是级联的 我创建了x的(非托管)实例x和y的(非托管)实例y,并在x中填充对y的引用。y中唯一填充的字段是主键 实体y在基础数据库中已具有相应的行,但实体x是新的 我坚持实体x 当我执行这个场景时,我希望看到一个查询:insertx。但是,实际情况是Hibernate执行两个查询: 选择y 插入x 此外,我还注意到,在持久化x之后,对y的引用实际上并没有被管理,会话中也没有
- 我有两个实体类:X和Y。X与Y有一个@manytone关联,它不是级联的
- 我创建了x的(非托管)实例x和y的(非托管)实例y,并在x中填充对y的引用。y中唯一填充的字段是主键
- 实体y在基础数据库中已具有相应的行,但实体x是新的
- 我坚持实体x
- 选择y
- 插入x
然后将y指定给x,并保持x将按您预期的方式运行。很好,效果很好!关于我问题的另一部分,你有什么想法吗:在我的场景中,为什么Hibernate在y上进行选择?我想了想,但没有确定的答案。我的猜测是,由于您手动创建实例,它是一个分离的对象(不是由hibernate持久性上下文管理的对象),因此hibernate需要检查它是否确实存在于数据库中。但我不确定,因为即使它不存在,db也会抛出一个外键限制错误,插入也会阻止它。简而言之,我不知道:)
Y y = (Y) session.load(Y.class, pk);