Сделать класс @Embeddable необязательным? - PullRequest
4 голосов
/ 27 декабря 2010

У меня есть класс DateInterval, помеченный @Embeddable, и у него есть два постоянных поля, startDate и endDate.Поле DateInterval может быть необязательным в зависимости от постоянного класса, который его использует.Если поле DateInterval является необязательным, оба из startDate и endDate должны иметь значение NULL.

Как мне реализовать это с JPA 2 и / или Hibernate?

Если янепосредственно аннотируя поля DateInterval, как показано ниже, поля ALL DateInterval не будут необязательными, что явно не то, что я хочу.

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

Я пробовал следующее, ноне работает.

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

Есть предложения?Спасибо!

1 Ответ

12 голосов
/ 27 декабря 2010

Вы должны использовать @ 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; }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...