首页 > 解决方案 > 休眠延迟加载不起作用(@JoinColumnOrFormulas)

问题描述

我有这节课

@javax.persistence.Entity
@Table(name = "OD_STOCK")
@Inheritance(strategy = InheritanceType.JOINED)
@PrimaryKeyJoinColumn(name = "OD_STOCKID")
@XmlRootElement(name = "Stock")
public class Stock extends Entity  {

 @ManyToOne(fetch = FetchType.LAZY)
    @NotFound(action = NotFoundAction.IGNORE)
    @JoinColumnsOrFormulas({@JoinColumnOrFormula(formula = @JoinFormula(value = "STOCKGROUPCODE", referencedColumnName = "GD_CODEID")),
            @JoinColumnOrFormula(formula = @JoinFormula(referencedColumnName = "GD_CODETYPE", value = "'STOCKGROUP'"))})
    private StockGroup stockGroup;

}

但是当我加载 Stock 时,stockGroup 总是被加载......延迟加载不起作用。

我在 SQL 日志中看到这个 SELECT 来加载 stockGroup

   select
        stockgroup0_.GD_CODEID as GD_CODEI2_52_0_,
        stockgroup0_.GD_CODETYPE as GD_CODET1_52_0_,
        stockgroup0_.DBUSERINS as DBUSERIN3_52_0_,
        stockgroup0_.DBUSERUPD as DBUSERUP4_52_0_,
        stockgroup0_.AU_USERIDINS as AU_USERI5_52_0_,
        stockgroup0_.AU_USERIDUPD as AU_USERI6_52_0_,
        stockgroup0_.INSERTDATE as INSERTDA7_52_0_,
        stockgroup0_.MODIFYDATE as MODIFYDA8_52_0_,
        stockgroup0_.VERSION as VERSION9_52_0_,
        stockgroup0_.GD_CODE as GD_CODE10_52_0_,
        stockgroup0_.ISACTIVE as ISACTIV11_52_0_,
        stockgroup0_.PRINTORDER as PRINTOR12_52_0_,
        stockgroup0_.XMLGD_CODE as XMLGD_C13_52_0_ 
    from
        GD_CODE stockgroup0_ 
    where
        stockgroup0_.GD_CODEID=? 
        and stockgroup0_.GD_CODETYPE=? 
        and stockgroup0_.GD_CODETYPE='STOCKGROUP'

更糟糕的是,当 OD_STOCK 中的 GD_CODEID 为 NULL 时,加载对象的 SELECT 已完成,当 SELECT 不可用时,因为 GD_CODEID 为 NULL

当 GD_CODEID 为 NULL 时,GD_CODEID 绑定到 NULL。

为什么 ?我能做些什么 ?

标签: javahibernatelazy-loading

解决方案


推荐阅读