使@Embeddable类可选?

时间:2010-12-27 02:28:29

标签: java hibernate jpa

我有一个DateInterval类,注明了@Embeddable,它有两个持久字段startDateendDateDateInterval字段可能是可选的,具体取决于使用它的持久类。如果DateInterval字段是可选字段,则其startDateendDate都应为可为空。

如何使用JPA 2和/或Hibernate实现此功能?

如果我直接注释DateInterval的字段,如下所示,那么所有DateInterval字段都不是可选的,这显然不是我想要的。

@Embeddable
class DateInterval {
    @Column(nullable = false)
    public Date getStartDate() {
    }
}

我尝试了以下内容,但没有效果。

class Foo {
@Embedded
@Column(nullable = true)
    public DateInterval getDateInterval() {
    }
}

有什么建议吗?谢谢!

1 个答案:

答案 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; }

}