在ManyToone上休眠原因子选择

时间:2018-10-09 14:50:37

标签: java hibernate

我正在使用休眠模式,并且我拥有这些实体(出于保密原因,我无法发布真实实体):

EntityOne
   pay_code
   number
   pay_code_number  => primary key


EntityTwo
   pay_code  => primary key
   number    => primary key
   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumns({
        @JoinColumn(name="pay_code", referencedColumnName="pay_code", insertable=false, updatable=false),
        @JoinColumn(name="number", referencedColumnName="number", insertable=false, updatable=false)})
   EntityOne entityOne;


EntityThree
   id
   pay_code_number => primary key
   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name="pay_code_number", insertable=false, updatable=false)
   EntityOne entityOne;

当我从EntityThree et join中进行选择时,eetching.entityOne工作正常,不再进行选择。

但是当我从EntityTwo et join fetch et.entityOne中进行选择时,似乎没有完成,这导致sub select和我有两个选择需要很长时间...如果我看生成的sql我可以看到所有字段从select子句中的entityOne和entityTwo中获取,因此对我来说,休眠状态可以加载实体而无需将另一个选择发送到数据库。但我不知道他为什么不这样做。

差异在连接列上,因为EntityThree在primaryKey上进行连接,而EntityTwo在不是EntityOne的主键的列上进行连接。 我认为这是因为休眠尝试通过主键查找实体,而由于之前介绍的连接列而找不到它。

第一个解决方案是对联接进行重做,以在entityTwo中拥有一个pay_code_number,并在此列上执行联接,但是在此解决方案和更改太多事情之前,我在这里问是否有人可以帮助我避免这种重做。也许使用FormulaJoinColumn或其他方式?

多谢

0 个答案:

没有答案