我需要坚持一个数据结构,它的值可以是字符串,双精度或日期。Hibernate OneToOne映射到不同的表
有没有办法做一对一的映射,条件由表?对于实体映射重复列:
我想这...
@Table(name = "FIELD_CRITERIA")
public class FieldCriteriaEntity implements Identifiable{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "CRITERIA_KEY", unique = true, nullable = false)
private Long id;
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL,optional=true)
@JoinColumn(name="CRITERIA_ID")
private StringCriteriaEntity stringCriteria;
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL,optional=true)
@JoinColumn(name="CRITERIA_ID")
private NumeriCriteriaEntity numericCriteria;
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL,optional=true)
@JoinColumn(name="CRITERIA_ID")
private DateCriteriaEntity dateCriteria;
}
然而,休眠不喜欢这样的:
造成的:org.hibernate.MappingException
有没有办法配置hibernate来处理这个问题?或者我应该简单地重新建模FIELD_CRITERIA表以包含3个可选的OneToMany关系?
我试着实现你的建议,但我遇到了抽象类的问题。 @Entity @Inheritance(策略= InheritanceType.TABLE_PER_CLASS) 公共抽象类FieldCriteriaEntity 错误是:org.hibernate.AnnotationException:通过引起不为实体指定的标识符:murex.risk.compliance.excess.entities.FieldCriteriaEntity –
为什么我需要为实体指定一个标识符,如果它是抽象的。 –
对不起队友忘了在我之前的帖子中提到它,criteriaId需要使用@Id注释来声明为主键。您的案例中的外键需要是关联实体或表中的主键。 –