繁体   English   中英

单表继承和关系

[英]Single table inheritance and relationship

我正在尝试找到此问题的解决方案:

数据库中有一个表( code_list ),其中包含所有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;

不行...

我已经删除了对自定义库的依赖,并且可以正常工作。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM