我需要堅持一個數據結構,它的值可以是字符串,雙精度或日期。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註釋來聲明爲主鍵。您的案例中的外鍵需要是關聯實體或表中的主鍵。 –