Hibernate连接动态值的注释

时间:2015-10-07 12:39:44

标签: hibernate

我遇到设计不良的数据库模式,我需要加入一个基于复合键的表,其中缺少一个字段(在MySql中有这样的FK,但是Hibernate抱怨它)。

@ManyToOne  
@JoinColumnsOrFormulas({
        @JoinColumnOrFormula(column=@JoinColumn(name = "par_mascode", referencedColumnName = "mascode", nullable = false, insertable = false, updatable = false)),
        @JoinColumnOrFormula(formula=@JoinFormula(value="dynamicVariable", referencedColumnName = "maslang")) })
public Master getMaster() {
    return this.master;
}

dynamicVariable应代表当前用户选择的Locale,它是通过代码获得的(不存在于DB中)。

1 个答案:

答案 0 :(得分:0)

因为@Formula仅支持标准SQL,所以我想出了使用数据库会话变量的解决方法。

@ManyToOne(fetch=FetchType.EAGER)   
@JoinColumnsOrFormulas({
        @JoinColumnOrFormula(column=@JoinColumn(name = "par_mascode", referencedColumnName = "mascode", nullable = false, insertable = false, updatable = false)),
        @JoinColumnOrFormula(formula=@JoinFormula(value="@lang", referencedColumnName = "maslang")) })
public Master getMaster() {
    return this.master;
}

//called before getting list of entities
Query nativeQuery = entityManager.createNativeQuery("SET @lang=:lang").setParameter("lang", Utils.getLanguageIdFromContext());
nativeQuery.executeUpdate();