动态值上的Hibernate联接注释

动态值上的Hibernate联接注释,hibernate,Hibernate,我被设计糟糕的数据库模式所困扰,我需要加入一个基于复合键的表,其中缺少一个字段(在MySql中有这样的FK是可以的,但Hibernate对此表示不满) dynamicVariable应该表示当前用户选择的区域设置,该区域设置是在代码中获得的(不存在于数据库中)。因为@Formula只支持标准SQL,所以我提出了使用数据库会话变量的解决方法 @ManyToOne(fetch=FetchType.EAGER) @JoinColumnsOrFormulas({ @JoinColu

我被设计糟糕的数据库模式所困扰,我需要加入一个基于复合键的表,其中缺少一个字段(在MySql中有这样的FK是可以的,但Hibernate对此表示不满)


dynamicVariable
应该表示当前用户选择的区域设置,该区域设置是在代码中获得的(不存在于数据库中)。

因为
@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();
@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();