2011-08-21 84 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。作为撰写描述的一部分,它被错过了。 –