我正试图找到解决此问题的方法:
我们在数据库中有一个表(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;
不能工作......
答案 0 :(得分:0)
我删除了对自定义库的依赖,这很有用。
我无法在干净的项目中重现此错误。
无论如何,这个解决方案真的很慢!