2012-06-10 200 views
0

我有三個實體如下:休眠OneToOne映射問題

  1. 物業
  2. Property_Document
  3. Property_User

PropertyProperty_Document有一對多的關係。
PropertyProperty_User有一對一的關係。

在數據庫級別,Property_User具有外鍵「property_id」,返回到Property表。

我使用註釋來定義實體之間的映射和關係。

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

您需要「屬性」表中的列來存放它引用的用戶的ID。由於您沒有在映射中指定任何列,因此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_id不存在。因爲屬性表沒有該列。 –