2012-06-10 5 views
0

У меня есть три объекта, как показано ниже:Hibernate OneToOne Mapping Выпуск

  1. собственности
  2. Property_Document
  3. Property_User

Property и Property_Document есть один ко многим отношений.
Property и Property_User имеет отношения Один к одному.

На уровне базы данных Property_User имеет внешний ключ «property_id», обратно в таблицу свойств.

Я использую аннотации для определения отображений и связей между сущностями.

Property.java

public class Property { 
    //..... 
    @OneToMany(cascade=CascadeType.ALL) 
    @JoinColumn(name="property_id") 
    private List<PropertyDocuments> docs; 

    @OneToOne(cascade=CascadeType.ALL) 
    private PropertyUser owner; 
    //.... 
} 

PropertyUser.java

public class PropertyUser { 
    @Id 
    private int id; 

    @column 
    private String name; 
    //...... 
} 

Когда выбирающий свойство, список документов получает успешно, но когда он пытается извлечь информацию о пользователе она показывает ниже сообщение об ошибке.

column: owner_id doesn't exist. 

Просьба помочь. Благодарю.

ответ

2

Для хранения идентификатора пользователя, которому он ссылается, необходим столбец в таблице свойств. Поскольку вы не указали какой-либо столбец в вашем сопоставлении, Hibernate использует имя столбца по умолчанию, которое является owner_id (имя свойства, за которым следует имя столбца, который он ссылается). Если вы хотите использовать другое имя столбца, вы должны сказать Hibernate: он не может угадать его магически:

@OneToOne(cascade=CascadeType.ALL) 
@JoinColumn(name = "the_column_containing_the_id_of_the_referenced_user") 
private PropertyUser owner; 
+0

я уже назначить внешний ключ в таблице Property_User. Если я укажу этот ключ здесь, он не сработает. –

+0

* Как * не работает. Когда что-то «не работает», у вас есть исключение с сообщением и трассировкой стека, которая помогает диагностировать проблему. Или, по крайней мере, что-то происходит, что отличается от того, что вы ожидаете. «Это не работает» недостаточно для диагностики проблемы. –

+0

Я имею в виду, что когда я указываю, что @JoinColumn ("property_id"), запрос выбора для свойства генерирует исключение, которое property.property_id не существует. Поскольку в таблице свойств нет этого столбца. –