У меня есть отношение "много-к-одному", которое я хочу иметь значение "nullable":
@ManyToOne(optional = true)
@JoinColumn(name = "customer_id", nullable = true)
private Customer customer;
К сожалению, JPA продолжает устанавливать столбец в моей базе данных как NOT NULL. Может кто-нибудь объяснить это? Есть ли способ заставить его работать? Обратите внимание, что я использую JBoss 7, JPA 2.0 с Hibernate в качестве поставщика непрерывности и базу данных PostgreSQL 9.1.
ИЗМЕНИТЬ
Я нашел причину своей проблемы. По-видимому, это связано с тем, как я определил первичный ключ в ссылочном объекте Customer
:
@Entity
@Table
public class Customer {
@Id
@GeneratedValue
@Column(columnDefinition="serial")
private int id;
}
Похоже, что использование @Column(columnDefinition="serial")
для первичного ключа автоматически устанавливает внешние ключи, ссылающиеся на него NOT NULL
в базе данных. Действительно ли это ожидаемое поведение при указании типа столбца как serial
? Есть ли обходной путь для включения обнуляемых внешних ключей в этом случае?
Спасибо заранее.