2013-02-24 237 views
0

我想使用休眠与现有的MySQL数据库使用Eclipse。外键休眠配置

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

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

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

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

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

这是生成的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

从db中生成POJO和DAO有什么问题? – 2013-02-24 20:39:35

+0

@RomanC我跟着这个http://www.wikihow.com/Generate-Hibernate-Pojo-Classes-from-DB-Tables,但我得到这个错误org.hibernate.impl.SessionFactoryObjectFactory - 无法将工厂绑定到JNDI – 2013-02-24 20:53:48

+0

你为什么将工厂绑定到JNDI? – 2013-02-24 21:01:38

回答

1

你的数据模型有点奇怪。

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

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