2012-06-10 201 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不存在。因为属性表没有该列。 –