外键休眠配置

时间:2013-02-24 20:04:48

标签: database eclipse hibernate jboss

我正在尝试使用Eclipse在现有的mysql数据库中使用hibernate。

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

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

我希望课程Caratteristica有一个类型为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- composite key configuration但是......这是我第一次使用hibernate,我真的迷路了!

1 个答案:

答案 0 :(得分:1)

您的数据模型有点奇怪。

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

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