2011-08-21 91 views
2

(下面簡化的例子)休眠 - 使用@SecondaryTable,@OneToMany

我試圖映射與2代DB表一個POJO類,並且還創建一對多關聯。下面是類的樣子..

@Entity 
@Table(name = "external_data") 
@SecondaryTable(name = "external_data_hierarchy") 
public class ExternalData { 

    private int externalDataId; 

    @OneToMany(fetch = FetchType.LAZY) 
    @JoinTable(name = "external_data_hierarchy") 
    @JoinColumn(name = "external_data_parent_id") 
    private List<ExternalData> children; 
.. 

} 

下面是表..

mysql> desc external_data; 
+------------------+--------------+------+-----+---------+----------------+ 
| Field   | Type   | Null | Key | Default | Extra   | 
+------------------+--------------+------+-----+---------+----------------+ 
| external_data_id | int(11)  | NO | PRI | NULL | auto_increment | 
+------------------+--------------+------+-----+---------+----------------+ 
5 rows in set (0.06 sec) 

mysql> desc external_data_hierarchy; 
+----------------------------+---------+------+-----+---------+----------------+ 
| Field      | Type | Null | Key | Default | Extra   | 
+----------------------------+---------+------+-----+---------+----------------+ 
| external_data_hierarchy_id | int(11) | NO | PRI | NULL | auto_increment | 
| external_data_parent_id | int(11) | YES | MUL | NULL |    | 
| external_data_child_id  | int(11) | YES | MUL | NULL |    | 
+----------------------------+---------+------+-----+---------+----------------+ 
3 rows in set (0.00 sec) 

Note: "external_data_parent_id" and "external_data_child_id" columns refer external_data.external_data_id column. 

正如你所知道的,我想店親子關係在不同的表。 現在,當我嘗試在ExternalData上創建()而不設置子節點時,它可以工作。 當我嘗試獲取此創建使用ExternalData.getChildren()我得到下面的異常數據..

[main] WARN in [org.hibernate.util.JDBCExceptionReporter.logExceptions(JDBCExceptionReporter.java:100)] - SQL Error: 1054, SQLState: 42S22 
[main] ERROR in [org.hibernate.util.JDBCExceptionReporter.logExceptions(JDBCExceptionReporter.java:101)] - Unknown column 'externalda0_1_.external_data_id' in 'on clause' 

我在做什麼錯?

+0

爲代碼片段添加@OneToMany。作爲撰寫描述的一部分,它被錯過了。 –

回答

2

目前尚不清楚表格之間存在哪種關係。 external_data_child_id專欄有什麼用?

我能說的是:

  • 您不必對孩子場
  • 這一對多要麼映射由於連接列,或由於連接表的一個@OneToMany註解。不是都。
  • 由於您使用的是輔助表,您應該使用註釋的表格屬性指定每個列或JoinColumn在哪個表中(或者至少應該在列或連接柱不在時指定它)主表)。

對一對多associatios解釋見http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#mapping-declaration-join關於SecondaryTable應如何使用說明,以及http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#collections-mapping

+0

爲代碼片段添加了@OneToMany。作爲撰寫描述的一部分,它被錯過了。 –