单表继承和关系

时间:2018-03-16 10:40:26

标签: java hibernate jpa inheritance single-table-inheritance

我正试图找到解决此问题的方法:

我们在数据库中有一个表(code_list),其中包含所有类似enum的数据。

我们说我们有Affiliate,可以有AffiliateTypeLanguageCode

我们将所有这些放在code_list表格中,id_code_list字段告诉我们,如果我们正在谈论AffiliateTypeLanguagecode,我们可以StringInteger标识符告诉我们我们正在谈论的AffiliateType

表格中的数据示例:

    | id_code_list | val_num | val_string | label  |
    | :----------: |:------: |:---------: | :-----:|
    | TYP_AFF      | 3       | 3          | Other  |
    | TYP_AFF      | 1       | 1          | Divers |
    | COD_LAN      | 1       | 1          | French |

我试图以这种方式映射: 代码列表父

@Entity
@Table(name = "CODE_LIST")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "ID_CODE_LIST")
public abstract class CodeListString {

    @Id
    @Column(name = "VAL_STRING")
    protected String value;

    @Embedded
    protected Label label;
...

会员类型:

@Entity
@DiscriminatorValue("TYP_AFF")
public class AffiliateType extends CodeListString{

    public static final AffiliateType SOCIAL_SECRETARIAT = new AffiliateType("1");
    public static final AffiliateType VARIOUS_SERVICES = new AffiliateType("2");
    public static final AffiliateType OTHERS = new AffiliateType("3");
    public static final AffiliateType SOPA = new AffiliateType("9");

    public AffiliateType() {}

    private AffiliateType(String value) {
        super(value);
    }
}

我的Affiliate实体:

@Entity
@Table(name = "AFF")
public class Affiliate {
    @ManyToOne
    @JoinColumn(name = "TYP_AFF")
    private AffiliateType type;

但是我收到了这个错误:

  

org.hibernate.MappingException:外键(FK7re97tvvbbo2km961gy9b5jw6:aff [typ_aff]))必须与引用的主键具有相同的列数(code_list [val_string,id_code_list])

那么,有没有办法让这项工作或你有其他解决方案来解决这个问题?

PS:我正在使用Hibernate和像

这样的解决方案
@ManyToOne(targetEntity = AffiliateType.class)
@JoinColumn(name = "TYP_AFF")
@Where(clause = "ID_CODE_LIST='TYP_AFF'")
private AffiliateType type;

不能工作......

1 个答案:

答案 0 :(得分:0)

我删除了对自定义库的依赖,这很有用。

我无法在干净的项目中重现此错误。

无论如何,这个解决方案真的很慢!