【问题标题】:Make an @Embeddable class optional?将@Embeddable 类设为可选?
【发布时间】:2010-12-27 02:28:29
【问题描述】:

我有一个用@Embeddable 注释的DateInterval 类,它有两个持久字段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() {
    }
}

有什么建议吗?谢谢!

【问题讨论】:

    标签: java hibernate jpa


    【解决方案1】:

    如果您覆盖默认设置,您应该使用@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; }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-12
      • 2017-11-21
      • 1970-01-01
      • 2014-08-24
      相关资源
      最近更新 更多