我有一个DateInterval
类,注明了@Embeddable
,它有两个持久字段startDate
和endDate
。 DateInterval
字段可能是可选的,具体取决于使用它的持久类。如果DateInterval
字段是可选字段,则其startDate
和endDate
都应为可为空。
如何使用JPA 2和/或Hibernate实现此功能?
如果我直接注释DateInterval
的字段,如下所示,那么所有DateInterval
字段都不是可选的,这显然不是我想要的。
@Embeddable
class DateInterval {
@Column(nullable = false)
public Date getStartDate() {
}
}
我尝试了以下内容,但没有效果。
class Foo {
@Embedded
@Column(nullable = true)
public DateInterval getDateInterval() {
}
}
有什么建议吗?谢谢!
答案 0 :(得分:12)
如果要覆盖默认设置,则应使用@AttributeOverride(仅限一列)或@AttributeOverrides(如果有多列)
改为使用
public class Foo {
private DateInterval dateInterval;
@Embedded
@AttributeOverrides({
@AttributeOverride(name="startDate", column=@Column(nullable=true)),
@AttributeOverride(name="endDate", column=@Column(nullable=true))
})
public DateInterval getDateInterval() { return this.dateInterval; }
public void setDateInterval(DateInterval dateInterval) { this.dateInterval = dateInterval; }
}