我正在尝试找到此问题的解决方案:
数据库中有一个表(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;
不行...
最佳答案
我已经删除了对自定义库的依赖,并且可以正常工作。
我无法在一个干净的项目上重现此错误。
无论如何,这个解决方案真的很慢!