[英]Single table inheritance and relationship
我正在尝试找到此问题的解决方案:
数据库中有一个表( code_list
),其中包含所有code_list
enum
的数据。
假设我们有一个Affiliate
,可以有一个AffiliateType
和LanguageCode
。
我们将所有这些都放在code_list
表中,其中id_code_list
字段告诉我们我们是否在谈论AffiliateType
或Languagecode
,我们可以使用String
或Integer
标识符来告诉我们正在谈论的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.