2012-04-09 19 views
0

Ich habe ein Problem im 1: 1-Hibernate-Mapping. Viel gegoogelt, aber nicht gelöst.Hibernate-Eins-zu-eins-Zuordnung

Hier Datenbank

http://www.freeimagehosting.net/newuploads/55avs.png

Nach meiner Modellklassen sind.

public class User {

private int userId; 
private String userName; 
private Address address; 

public Address getAddress() { 
    return address; 
} 
public void setAddress(Address address) { 
    this.address = address; 
} 
public int getUserId() { 
    return userId; 
} 
public void setUserId(int userId) { 
    this.userId = userId; 
} 

public String getUserName() { 
    return userName; 
} 
public void setUserName(String userName) { 
    this.userName = userName; 
} 

}

und

public class Address {

private int addrId; 
private String addr; 

public int getAddrId() { 
    return addrId; 
} 
public void setAddrId(int addrId) { 
    this.addrId = addrId; 
} 
public String getAddr() { 
    return addr; 
} 
public void setAddr(String addr) { 
    this.addr = addr; 
} 

}

user.hbm.xml ist wie folgt:

<class name="User" table="users" schema="dbo" catalog="test"> 
     <id name="userId" type="int" column="userId" > 
     <generator class="assigned"/> 
     </id> 

     <property name="userName"> 
     <column name="userName" /> 
     </property> 

     <one-to-one name="address" property-ref="addrId" class="Address" cascade="all" /> 

    </class> 

address.hbm.xml wie unten,

<class name="ammar.Address" table="Address" schema="dbo" catalog="test"> 

     <id name="addrId" type="int" column="AddrID" > 
     <generator class="assigned"/> 
     </id> 

     <property name="addr"> 
     <column name="Addr" /> 
     </property> 

    </class> 

Auf ausgeführt wird, folgende Ausnahme auftritt:

Ausnahme in Thread "Haupt" org.hibernate.HibernateException: Eigenschaft kann nicht aufgelöst werden: addrId

läuft gut ohne Zuordnung. Sie können Datensätze jedoch nicht abrufen, wenn das Mapping angewendet wurde.

Die Abfrage von Hibernate läuft einwandfrei in DB.

+0

Sie müssen weitere Details angeben. Getter und Setter für addrId, die Mapping-Datei für Address, die Sql-Struktur für beide. – Jim

+0

Ich bearbeitet, um Details zur Verfügung zu stellen, wie Sie gesagt haben. – Ammar

Antwort

2

In user.hbm.xml property-ref="addrId" sollte property-ref="userId" sein, da das Property-Ref darüber spricht, wie eine Adresse an einen Benutzer angeschlossen wird, nicht umgekehrt, was verwirrend ist. Sie können wahrscheinlich Property-ref weglassen, da ohne es Address wird der Benutzer über den Fremdschlüssel auf den Primärschlüssel zeigen. Die docs sagen "Wenn nicht angegeben, wird der Primärschlüssel der zugehörigen Klasse verwendet" (Abschnitt 5.1.13).

+0

Ich habe das Property-ref Attribut entfernt und es funktioniert. Danke Jim. – Ammar

0

Ich glaube nicht, dass es mit int Werten arbeiten ... ich, was sie haben Integer sein ...

können Sie wie folgt ändern ?:

private int addrId; 

in

private Integer addrId; 

und so weiter für alle int Variablen ...

+0

Das Problem ist nicht mit int. Es funktioniert gut, wenn es alleine mit Benutzer oder Adresse gemacht wird. Problem ist mit dem Mapping. here Ammar