Mam relację wiele-do-jednego, że chcę być pustych:Nie można uczynić związek @ManyToOne pustych
@ManyToOne(optional = true)
@JoinColumn(name = "customer_id", nullable = true)
private Customer customer;
Niestety, JPA utrzymuje ustawienie kolumny w mojej bazy danych jako NOT NULL. Czy ktoś może to wyjaśnić? Czy istnieje sposób, aby to zadziałało? Zauważ, że używam JBoss 7, JPA 2.0 z Hibernate jako dostawca trwałości i bazy danych PostgreSQL 9.1.
EDIT:
znalazłem przyczynę mojego problemu. Widocznie to jest ze względu na sposób, w jaki zdefiniowano klucza podstawowego w wymienionej jednostce Customer
:
@Entity
@Table
public class Customer {
@Id
@GeneratedValue
@Column(columnDefinition="serial")
private int id;
}
Wydaje się, że za pomocą @Column(columnDefinition="serial")
na klucz podstawowy automatycznie ustawia zagranicznych klucze odwołujące się do NOT NULL
w bazie danych. Czy jest to rzeczywiście oczekiwane zachowanie podczas określania typu kolumny jako serial
? Czy istnieje obejście umożliwiające włączanie zerowych kluczy obcych w tym przypadku?
Z góry dziękuję.
to rzeczywiście rozwiązanie mam rozpatrywane. Niestety nie pozwala to na generowanie ID z samej bazy danych i jest to funkcja potrzebna przy ręcznym wprowadzaniu danych (na przykład przy użyciu hibernacji import.sql). Na szczęście chyba znajdę rozwiązanie. Właśnie robię testy i jeśli to się uda, opublikuję to rozwiązanie. Dzięki za pomoc. – vcattin