我有一个表中就有两个字段,表中的主键就是由这两个字段构成的复合主键。这两个字段还作为其它表的外键进行单向关联。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();
帮帮忙吧,谢谢了
<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();
帮帮忙吧,谢谢了
改成
<composite-id name="id" class="包名.TModeltypeInGroupId ">
那你就用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语句