2010-12-27 1 views
4

私は@Embeddableと注釈されたDateIntervalクラスを持っていて、2つの永続フィールド、startDateendDateを持っています。 A DateIntervalフィールドは、それを使用する永続クラスによってはオプションです。 DateIntervalフィールドがオプションの場合は、startDateendDateの両方をNULL可能にする必要があります。@Embeddableクラスをオプションにしますか?

JPA 2および/またはHibernateでこれを実装するにはどうすればよいですか?

DateIntervalのフィールドに直接注釈を付けると、ALL DateIntervalフィールドはオプションではありません。これは明らかに私が望むものではありません。

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

私は以下を試しましたが、動作しませんでした。

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

ありがとう!

答えて

11

あなたは@AttributeOverride(1列のみ)または@AttributeOverrides場合を使用する必要があり、複数のごデフォ​​ルト設定を上書きする場合

利用代わり

public class Foo { 

    private DateInterval dateInterval; 

    @Embedded 
    @AttributeOverrides({ 
     @AttributeOverride(name="startDate", [email protected](nullable=true)), 
     @AttributeOverride(name="endDate", [email protected](nullable=true)) 
    }) 
    public DateInterval getDateInterval() { return this.dateInterval; } 
    public void setDateInterval(DateInterval dateInterval) { this.dateInterval = dateInterval; } 

} 
関連する問題