0

我正在尝试使用 Eclipse 将休眠与现有的 mysql 数据库一起使用。

我已经成功地将表映射到类并执行了一些查询。但我有一个一对多关系的问题。

我有表“CARATTERISTICHE”(属性),它实际上是一棵树,由连接表“VALORI”(值)描述:“fk_child”“fk_parent”。

我希望 Caratteristica 类有一个类型为“children”的字段List<Caratteristica>,其中孩子应该是 CARATTERISTICA 和 VALORI 的连接。

我的第一次尝试是创建一个 pojo Caratteristica 并让 eclipse 生成 hibernate 的配置文件。

这不起作用,因为当我启动 getChildren 时,我得到的只是同一个对象(即每个节点都是他的父亲,这在我的数据库中是错误的)。

这是生成的 xml 的摘录:

<class name="model.Caratteristica" table="caratteristiche">
  <id name="id" type="java.lang.Integer">
   <column name="ID"/>
   <generator class="assigned"/>
  </id>
  <set access="field" lazy="true" name="children"
   sort="unsorted" table="valori">
   <key>
    <column name="id"/>
   </key>
   <one-to-many class="model.Caratteristica"/>
  </set>

请注意,如果将列键从 id 更改为 fk_child,他在表“CARATTERISTICHE”中找不到 fk_child(但它应该在 VALORI 中查找,对吗?)

我也尝试过从表中生成 pojos,但更糟..也许我遇到了这个问题hibernate-复合键配置但是..这是我第一次使用 hibernate,我真的迷路了!

4

1 回答 1

1

你的数据模型有点奇怪。

要么你有一个完整的树结构,即父母和孩子之间的 1 : n 关系。那么您就不需要连接表 VALORI。在 CARATTERISTICHE 中,您只需定义一个列 parentId,其中包含父行的 id。在您的映射中,您将此新列作为键标记:<key> <column name="parentId"/> </key>

或者您在父母和孩子之间有一个 m : n 关系,它由连接表 VALORI 定义。树结构可以定义为具有 m : n 关系的特殊情况,但其他结构也是可能的。然后你必须使用<many-to-many>标签(而不是一对多)。<many-to-many>标签包含属性,它允许在column另一个表中指定相应外键的名称。

于 2013-02-25T14:37:40.627 回答