Как сделать поле @ManyToOne обязательным в JPA2?

#java #hibernate #jpa #jpa-2.0

#java #переход в спящий режим #jpa #jpa-2.0

Вопрос:

Я разрабатываю хранилище сохраняемости для приложения.

Я новичок в Hibernate JPA2, и у меня возникли проблемы с созданием более сложных отношений, в данном случае с внешним обязательным ключом.

Пример (только что написал в блокноте, так что это не совсем так.)

У меня есть высший класс под названием Person, который может содержать несколько должностей (другой класс).

Если я сопоставлю свой верхний класс следующим образом

 @Entity
@Table(name="tb_people")
public class Person{
    @Id
    @GeneratedValue
    public long         id;

    @OneToMany(mappedBy="person")
    List<Post>          listOfPosts;

    .
    . more code
    .

}

@Entity
@Table(name="tb_posts")
public class Post{

    @Id
    @GeneratedValue
    public long         id;

    @ManyToOne
    @JoinColumn(name = "person_id")
    Person              person;

    .
    .more code
    .

}
  

Как я могу с помощью аннотаций сделать поле person в Post обязательным?

Я попытался использовать @Column (nullable = false), но я получаю исключение, сообщающее мне, что я не могу использовать эту аннотацию в коллекции @ManyToOne.

Спасибо!

Ответ №1:

Вы должны использовать @JoinColumn(name=..., nullable=false) не @Column

Смотрите полный API

Ответ №2:

Или вы можете просто использовать @NotNull из пакета javax.validations.constraints.

Ответ №3:

Должно быть достаточно просто использовать @ManyToOne(optional = false)