配置文件为:<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.aisino.tree.entity.Personinfo" table="PERSONINFO">
        <id name="cid" type="string">
            <column name="CID" length="50" />
            <generator class="assigned" />
        </id>
        <property name="pid" type="string">
            <column name="PID" length="50" />
        </property>
        <property name="name" type="string">
            <column name="NAME" length="50" />
        </property>
        <property name="type" type="integer">
            <column name="TYPE"  />
        </property>
        <property name="isleaf" type="integer">
            <column name="ISLEAF"/>
        </property>
        <many-to-one name="parent">
            <column name="pid"/>
        </many-to-one>
        <set name="children" inverse="true" cascade="save-update">
            <key>
                <column name="pid"/>
            </key>
            <one-to-many class="com.aisino.tree.entity.Personinfo" />
        </set>
    </class>
</hibernate-mapping>我想单独添加一条数据我就直接用session.save(Person);
然后系统给我报个错org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update。
发出的sql语句是:
Hibernate: insert into PERSONINFO (PID, NAME, TYPE, ISLEAF, pid, CID) values (?, ?, ?, ?, ?, ?)
就是pid出现重复列了,这是什么原因还是配置文件哪里有问题,好像它把parent对象也级联保存了,
但是我删除cascade配置也没用, 求教了。
(不知道大家看的懂这配置文件意思不,就是这样配置可以生成树的结构如:cid,pid)

解决方案 »

  1.   

    你数据库用的是什么?
    oracle吗? <id name="cid" type="string">
                <column name="CID" length="50" />
                <generator class="native" />//native试试。
     </id>我的库是oracle 也报这个错啊。呵呵,借地期待高手。
      

  2.   

     <set name="children" inverse="false" cascade="save-update">看看,不行,请贴出你的批处理程序
      

  3.   

    解决了,只要把下面这个属性配置删除就可以了<property name="pid" type="string">
                <column name="PID" length="50" />
            </property>以为配置了这个<set name="children" inverse="true" cascade="save-update">
                <key>
                    <column name="pid"/>
                </key>
                <one-to-many class="com.aisino.tree.entity.Personinfo" />
            </set>那么pid就可以认为是外键
    总之,很感谢各位啊