我有一个表中就有两个字段,表中的主键就是由这两个字段构成的复合主键。这两个字段还作为其它表的外键进行单向关联。hibernate.xml如下
  <composite-id >
            <key-many-to-one name="groupId" class="com.gist.zwy.entity.sysMng.TUserGroupDefine">
                <column name="GroupID" length="30" />
            </key-many-to-one>
             
            <key-many-to-one name="modeltypeId" class="com.gist.zwy.entity.report.TReportmodeltype">
                <column name="modeltype_id" />
            </key-many-to-one>
             
         
        </composite-id>
 <many-to-one name="modeltypeId"
class="com.gist.zwy.entity.report.TReportmodeltype"  update="false" insert="false" fetch="select" not-found="ignore">
<column name="modeltype_id" />
</many-to-one>
 <many-to-one name="groupId"
class="com.gist.zwy.entity.sysMng.TUserGroupDefine"  update="false" insert="false" fetch="select" not-found="ignore">
<column name="GroupID" />
</many-to-one>
我现在想修改这两个字段不知道用程序怎么实现,调用hibernate那些方法好像都实现不了,请帮帮忙谢谢了,具体程序如下。
第一种是直接执行对象修改不好使
TUserGroupDefine tgroup=new TUserGroupDefine();
tgroup.setId(Integer.parseInt(gr));
    t.setGroupId(tgroup);
    TReportmodeltype ttype=new TReportmodeltype();
    ttype.setModeltypeId(Integer.parseInt(ty));
    t.setModeltypeId(ttype);
   this.baseManager.findObjects(hql);
第二种是用HQL查询方法执行也不行
  hql="Update TModeltypeInGroupId set groupId='"+gr+"',modeltypeId='"+ty+
  "' where groupId='"+gr+"'";    this.baseManager.useSession().createQuery(hql).executeUpdate();
帮帮忙吧,谢谢了

解决方案 »

  1.   

    <composite-id > 
    改成
    <composite-id name="id" class="包名.TModeltypeInGroupId ">
      

  2.   


    那你就用hibernate直接执行sql
    1 createSQLQuery("sql语句").executeUpdate();//这个没什么好说的,就是写sql,然后执行;2 写定制SQL,似乎也能满足你的要求,就是在配置文件里写,hibernate的帮助文档里有这样的内容
    Hibernate3能够使用定制的SQL语句来执行create,update和delete操作。在Hibernate中,持久化的类和集合已经 包含了一套配置期产生的语句(insertsql, deletesql, updatesql等等),这些映射标记 <sql-insert>, <sql-delete>, and <sql-update>重载了 这些语句。 <class name="Person">
        <id name="id">
            <generator class="increment"/>
        </id>
        <property name="name" not-null="true"/>
        <sql-insert>INSERT INTO PERSON (NAME, ID) VALUES ( UPPER(?), ? )</sql-insert>
        <sql-update>UPDATE PERSON SET NAME=UPPER(?) WHERE ID=?</sql-update>
        <sql-delete>DELETE FROM PERSON WHERE ID=?</sql-delete>
    </class>
    然后执行
        person.setXxx(444);   
        session.save(person);   
        ......这样就执行了insert语句