我正在尝试使用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,我真的迷路了!
答案 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
属性,该属性允许在另一个表中指定相应外键的名称。