2012-04-09 2 views
0

Я столкнулся с проблемой в спящем режиме один к одному. Googled много, но не может решить.Hibernate взаимно-однозначное отображение

Вот база

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

Ниже приведены мои классы моделей.

общественного класса пользователя {

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; 
} 

}

и

общественного класса Адрес {

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 выглядит следующим образом:

<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, как показано ниже,

<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> 

При управлении, происходит следующее исключение:

Исключение из thread "main" org.hibernate.HibernateException: Невозможно разрешить свойство: addrId

Выполняет штраф без отображения. Но не может извлекать записи при применении сопоставления.

Запрос, напечатанный hibernate, отлично работает в БД.

+0

Вам необходимо предоставить более подробную информацию. Геттер и setter для addrId, файл сопоставления для Address, структура sql для обоих. – Jim

+0

Я отредактировал, чтобы предоставить подробную информацию, как вы сказали. – Ammar

ответ

2

В user.hbm.xml property-ref="addrId" должно быть property-ref="userId", потому что свойство-ref говорит о том, как подключить адрес к пользователю, а не наоборот, что путает. Вероятно, вы можете оставить свойство-ref, так как без него адрес найдет пользователя через внешний ключ, указывающий на первичный ключ. docs говорят: «Если не указано, используется первичный ключ связанного класса» (раздел 5.1.13).

+0

Я удалил атрибут property-ref, и он работает. Тханкс Джим. – Ammar

0

Я не думаю, что он работает с int ценностей ... Я, что они должны быть Integer ...

вы можете изменить, как это ?:

private int addrId; 

в

private Integer addrId; 

и т. Д. Для всех int переменных ...

+0

Проблема не с int. Он отлично работает, когда делается наедине с пользователем или адресом. Проблема связана с отображением. то есть здесь Ammar