Hibernate - 使用@SecondaryTable,@ OneToMany

时间:2011-08-21 21:08:21

标签: hibernate orm hibernate-mapping

(以下简化示例)

我正在尝试将一个POJO类映射到2个DB表,并创建一个OneToMany关联。这是课程的样子..

@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上尝试create()而不设置子项时,它可以工作。 当我尝试使用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'

我做错了什么?

1 个答案:

答案 0 :(得分:2)

表格之间的关系尚不清楚。 external_data_child_id列的用途是什么?

我能说的是:

  • 您在子字段
  • 上没有@OneToMany注释
  • 这个OneToMany可以通过连接列进行映射,也可以通过连接表进行映射。不是两个。
  • 由于您正在使用辅助表,因此应使用批注的表属性指定每个列或JoinColumn在哪个表中(或者至少应在列或连接列不在时指定它主表)。

有关如何使用SecondaryTable的说明,请参阅http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#mapping-declaration-join,有关OneToMany associatios的说明,请参阅http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#collections-mapping