2012-03-24 14 views
3

Ich versuche, eine Eins-zu-viele und eine viele-zu-eins-Beziehung mit Hibernate 4.1.1 persistent aber der Fremdschlüssel ist immer NULL.Null-Fremdschlüssel, in ManyToOne-Beziehung mit Hibernate [4.1.1] Anmerkungen

Es gibt zwei Entitäten: Konto und Client. Ein -Client könnte mehrere Accounts hat, während ein Konto genau einen Kunden hat.

Hier werden die Klassen sind (nur was zählt):

Account.java

@Entity 
@Table(name = "account") 
public class Account implements Serializable { 
    private Client client; 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "id") 
    public long getId() { 
     return id; 
    } 

    @ManyToOne 
    @JoinColumn(name = "id_client") 
    public Client getClient() { 
     return client; 
    } 
} 

Client.java

@Entity 
@Table(name = "client") 
public class Client implements Serializable { 
    private List<Account> accounts; 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "id") 
    public long getId() { 
     return id; 
    } 

    @OneToMany(mappedBy = "client", cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
    public List<Account> getAccounts() { 
     return accounts; 
    } 
} 

Test.java

session.beginTransaction(); 

Client client = new Client(); 
Account account1 = new Account(); 
Account account2 = new Account(); 

a.addAccount(account1); 
a.addAccount(account2); 

session.save(client); 
session.getTransaction().commit(); 

Während des Laufens, fügt Hibernate den Fremdschlüssel zur Tabelle:

Hibernate: alter table account add index FKB9D38A2D3B988D48 (id_client), add constraint FKB9D38A2D3B988D48 foreign key (id_client) references client (id)

Beide Konten id_client Spalte NULL haben.

Ich habe versucht, Nullable = false an der @ JoinColumn-Beziehung, aber das nur eine Ausnahme aufgerufen.

Exception in thread "main" org.hibernate.exception.ConstraintViolationException: Column 'id_client' cannot be null

+0

Versuchen Sie, die Annotation @NotNull auf der Konto Seite der Beziehung –

+0

Danke, aber es hat nicht funktioniert. –

Antwort

7

Ich habe es herausgefunden. Ich habe vergessen, den Kunden den Konten hinzuzufügen.

account1.setClient(client); 
account2.setClient(client); 

Jetzt funktioniert es. Danke für die Tipps. ;)

+0

Vier Stunden verschwendete die Entdeckung, dass ich dies tun musste. Vielen Dank. –

+0

Sie haben wirklich mein Leben gerettet ... Ich würde meinen Kopf an die Wand schlagen – Saif

+0

Ich dachte, dass dies automatisch getan wird, fix es Spalte 'id_client' kann nicht null sein – user3871754

0

Ich denke Problem ist, dass Sie Konto speichern müssen zuerst und im letzten Client gespeichert werden.