【问题标题】:Hibernate -- Using @SecondaryTable, @OneToMany休眠 -- 使用 @SecondaryTable、@OneToMany
【发布时间】:2011-10-31 18:08:07
【问题描述】:

(下面的简化示例)

我正在尝试用 2 个数据库表映射一个 POJO 类,并创建一个 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'

我做错了什么?

【问题讨论】:

  • 为代码 sn-p 添加了@OneToMany。在编写描述时遗漏了它。

标签: hibernate orm hibernate-mapping


【解决方案1】:

目前尚不清楚表之间存在哪种关系。 external_data_child_id 列有什么用?

我只能说:

  • 您的子字段中没有 @OneToMany 注释
  • 此 OneToMany 要么通过连接列映射,要么通过连接表映射。两者都不是。
  • 由于您使用的是辅助表,因此您应该使用注释的 table 属性指定每列或 JoinColumn 在哪个表中(或者至少,当列或连接列不在时,您应该指定它主表)。

请参阅 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 了解有关 OneToMany 关联的说明。

【讨论】:

  • 为代码 sn-p 添加了@OneToMany。在编写描述时遗漏了它。
猜你喜欢
  • 1970-01-01
  • 2013-07-01
  • 1970-01-01
  • 2017-07-30
  • 1970-01-01
  • 2015-07-07
  • 2019-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多