指定insert,update属性表明这个是虚拟字段(或当作它是),Hibernate不会对它进行插入和更新操作。通常用于many-to-one中已存在这个字段对应的对象(一般是ID),所以不能更新两次。象你的:
<class name="com.pelfu.saleadmin.pojo.SellOrder" table="sellOrder" schema="crm" catalog="crm">
映射文件中的:
<property name="clientId" type="integer" insert="false update="false">             
  <column name="clientId" />
</property>
但你的one-to-many这这些,不用设它们为false,所以把:
<property name="clientId" type="java.lang.Integer" insert="false" update="false">
改为:
<property name="clientId" type="java.lang.Integer">

解决方案 »

  1.   

    更正:
    指定insert,update属性为false表明这个是虚拟字段(或当作它是),Hibernate不会对它进行插入和更新操作。
      

  2.   

    <property name="clientId" type="java.lang.Integer" insert="false" update="false">
    改为:
    <property name="clientId" type="java.lang.Integer">
    则系统报错提示必须设置成insert="false" update="false"
    我估计是其他地方配置不当导致必须这样配置这个clientId字段
      

  3.   

    我把HBM改成如下配置,则可以满足联合查询的也可以对clientSetting表正常插入记录,但是修改clientSetting的记录则抛出异常。
    <?xml ligengyin233version="1.0"?>
    <!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 - Hibernate Tools
    -->
    <hibernate-mapping>
        <class name="com.pelfu.customeradmin.pojo.ClientSetting" table="clientSetting" schema="crm" catalog="crm">
            <id name="id" type="java.lang.Integer">
                <column name="id" />
                <generator class="identity" />
            </id>
            <property name="clientId" type="java.lang.Integer" update="true" insert="true">
                <column name="clientId" />
            </property>
            <property name="companyName" type="java.lang.String">
                <column name="companyName" length="100" />
            </property>
    ................
          
            <set name="sellOrders" inverse="true" cascade="all" fetch="select" lazy="true">
                <key property-ref="clientId" update="false">
                    <column name="clientId"/>
                </key>                        
                <one-to-many class="com.pelfu.saleadmin.pojo.SellOrder" />
            </set>
            
        </class>
    </hibernate-mapping><?xml version="1.0"?>
    <!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 - Hibernate Tools
    -->
    <hibernate-mapping>
        <class name="com.pelfu.saleadmin.pojo.SellOrder" table="sellOrder" schema="crm" catalog="crm">
            <id name="id" type="integer">
                <column name="id" />
                <generator class="identity" />
            </id>
            <property name="orderName" type="string">
                <column name="orderName" length="100" />
            </property>
            <property name="billNo" type="string">
                <column name="billNo" length="20" />
            </property>
            <property name="clientName" type="string">
                <column name="clientName" length="100" />
            </property>
            <property name="clientId" type="integer">
                <column name="clientId" />
            </property>
    ..................
            
            <many-to-one  name="clientSetting" class="com.pelfu.customeradmin.pojo.ClientSetting" cascade="none" fetch="select"  property-ref="clientId"
            update="false" insert="false">            
          
                <column name="clientId"/>        </many-to-one>
            
        </class>
    </hibernate-mapping>
      

  4.   

    <many-to-one  name="clientSetting" class="com.pelfu.customeradmin.pojo.ClientSetting"  cascade="none"  fetch="select"  property-ref="clientId">            
                <column name="clientId" />
            </many-to-one>
           <property name="clientId" type="integer" insert="false update="false">             
              <column name="clientId" />
            </property>
    这两个属性都映射了同一个clientId, 那么必须有一个属性是 insert="false update="false"
    否则生成的SQL 变成   insert into sellOrder(...,clientId,clientId,...), value(...)
    会有两个clientID, 肯定是不合法的.
    现在的问题是哪个属性设置为 insert="false update="false"
    (1) 如果设置 clientId 为 insert="false update="false"
        那么, 你要写clientId, 必须如下:
        SellOrder order= new SellOrder();
        ClientSetting client = new ClientSetting();
        client.setClientId(clientid);
        //如果client是数据库中已经存在的记录, 那么
       // ClientSetting client = session.load(ClientSetting.calss,clientid);
        order.setClientSetting(client);
        session.save(order);
    (2) 如果设置 cientSetting 属性为  insert="false update="false"
        SellOrder order= new SellOrder();
        order.setClientId(clientid);
        session.save(order);
      

  5.   

    这个问题很简单,你的表与表之间是关联关系,那么你只要设置many-to-one属性就可
    同时要设置lazy的属性为false,这样的话,你就可以很方便的从一个对象导航到另外一个对象
    而不需要什么连接查询同时,你在插入操作的时候
    需要先load一下相关的对象,建立他们之间的关联
    如果赞同我的做法
    qq :549761
      

  6.   

    aChinese(一个中国人) 你好,我现在对sellOrder表的增删查改是没有问题的。单独对clientSetting表进行修改则出现异常。
      

  7.   

    hibernate表一对多关系,我还没有搞过,学习!
      

  8.   

    Caused by: java.sql.SQLException: rollback() should not be called while in auto-
    commit mode.
      

  9.   

    我的建议仅供参考:
        我想问一下,你的前台要接收的内容是什么,我曾经做过一个牙医管理系统,它也涉及到了联合的问题,我要做的内容是在前台接收了一个医生的姓名,然后我要往另外的一个表里面去插入,但是在另外的一个表里和这个表没有任何的关系,插入的还是这个表的id,我只好在重新写了一个hql语句,去访问医生姓名的表,我通过得到的性名来查询它的id,然后将id插入到了我需要插入的表中。
    这是我的代码 action:package action;import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;import com.*;import bean.*;import java.io.IOException;
    import java.util.List;
    import java.util.Iterator;
    import java.util.ArrayList;
    import filter.NoteFilter;
    import form.StockOutForm;public class StockOutAction extends Action {
    public ActionForward execute(
    ActionMapping mapping,
    ActionForm form,
    HttpServletRequest request,
    HttpServletResponse response) throws IOException {


    NoteFilter filter=new NoteFilter();//是我写的一个过滤器
    List list=null;
    List list1=new ArrayList();
    StockOutput stockOutput=new StockOutput();
    GoodsName goodsName=new GoodsName();
    OrderDbo dbo=new OrderDbo();

    StringBuffer hql4=new StringBuffer("from StockOutput s left join fetch s.goodsName where 1=1");
         String check1=request.getParameter("checkbox1");
    String check2=request.getParameter("checkbox2");
    String check3=request.getParameter("checkbox3");
    String check4=request.getParameter("checkbox4");
         System.out.println("check1============="+check1);
         System.out.println("check2============="+check2);
         System.out.println("check3============="+check3);
         System.out.println("check4============="+check4);
        
          if(check1!= null){
          String bdate=request.getParameter("bdate");
                System.out.println("bdate============="+bdate);
            String edate=request.getParameter("edate");        hql4=hql4.append(" and s.outputDate between'");
                hql4=hql4.append(bdate);
                hql4=hql4.append(" 'and '");
                hql4=hql4.append(edate);
                hql4=hql4.append(" '");
       
            }
         if(check2!=null){
        
         String name=request.getParameter("pname");
         System.out.println(name);
         name=NoteFilter.filter(name.trim());
         System.out.println("check2");
         stockOutput.setName(name);
    hql4=hql4.append(" and s.name=:name");
         }
         if(check3!= null){
        
             String goodsname=request.getParameter("goodsname");
             goodsname=filter.filter(goodsname.trim());
             //再此的hql语句是一个参数绑定的形式
        goodsName.setGoodsId(dbo.getID1("from GoodsName g where g.goodsName=:goodsName",goodsname));
        System.out.println("iddddd="+goodsName.getGoodsId());

        stockOutput.setGoodsName(goodsName);
        
        hql4=hql4.append(" and s.goodsName=:goodsName");
        
        System.out.println("goodsName"+goodsname);
              }
         if(check4!= null){
         int Id=Integer.parseInt(request.getParameter("outputId"));
           System.out.println("Id="+Id);
           Integer outputId=new Integer(Id);  
               stockOutput.setOutputId(outputId);
       System.out.println("outputId"+outputId);
       hql4=hql4.append(" and s.outputId=:outputId");
           }     System.out.println("hql4.toString()========"+hql4.toString());
         list=dbo.select(stockOutput,hql4.toString());
         System.out.println("list");
         Iterator it=list.iterator();
         System.out.println("it="+list.size());
      while(it.hasNext())
      {
      System.out.println("w");
      StockOutput stock=(StockOutput)it.next();
      GoodsName goods=stock.getGoodsName();
      StockOutForm f1=new StockOutForm();
     
      f1.setOutputId(stock.getOutputId().toString());
      f1.setName(stock.getName());
      f1.setGoodsName(goods.getGoodsName());
      f1.setLyQuantity(stock.getLyQuantity().toString());
          f1.setPetailPirce(stock.getPetailPirce().toString());
      f1.setRe(stock.getRe());
      f1.setStoreroom(stock.getStoreroom());
      f1.setOutputDate(stock.getOutputDate().toString());
      list1.add(f1);
      System.out.println(list1.size());
      }
     
      Iterator it1=list1.iterator();
      System.out.println("it1");
      request.setAttribute("it",it1);

    return mapping.getInputForward();
    }}
      

  10.   

    <key property-ref="clientId" update="false">
      <column name="clientId"/>
     </key>
    试一下改为:<key property-ref="clientId">
        <column name="clientId"/>
    </key>你提供的你的运行代码才行,谁知道你怎操作时报错?