Hibernate 中 update 了多余字段

xiangfeidecainiao 2009-06-27 03:47:09

单元测试
public void testSaveTank() {

Session session = factory.openSession();
session.beginTransaction();
Tank tank = new Tank();
tank.setBodyProcess("BodyProcess");
tank.setMajorWeapon("MajorWeapon");
tank.setName("坦克01");
tank.setPowerSystem("PowerSystem");
tank.setSecondaryWeapon("SecondaryWeapon");
tank.setSuspensionSystem("SuspensionSystem");
tank.setWeight(1500);
session.save(tank);
session.getTransaction().commit();
session.close();

session = factory.openSession();
session.beginTransaction();
tank.setName("坦克0101");
session.update(tank);
session.getTransaction().commit();
session.close();

}


配置
<hibernate-mapping >
<class name="test.my.war2tank.pojo.tank.Tank" table="t_tank">
<id name="id">
<generator class="native"></generator><!-- "assigned" -->
</id>
<property name="name" />
<property name="bodyProcess" />
<property name="suspensionSystem" />
<property name="powerSystem" />
<property name="majorWeapon" />
<property name="secondaryWeapon" />
<property name="Weight" />
</class>
</hibernate-mapping>


输出
Hibernate:
insert
into
t_tank
(name, bodyProcess, suspensionSystem, powerSystem, majorWeapon, secondaryWeapon, Weight)
values
(?, ?, ?, ?, ?, ?, ?)
Hibernate:
update
t_tank
set
name=?,
bodyProcess=?,
suspensionSystem=?,
powerSystem=?,
majorWeapon=?,
secondaryWeapon=?,
Weight=?
where
id=?
...全文
64 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
guodong66 2009-06-29
  • 打赏
  • 举报
回复
执行update前先把数据库中的要修改的信息加载下 , 加载后要从session中移除该对象,然后在做更新。
sangshusen_1988 2009-06-27
  • 打赏
  • 举报
回复

你可以试下Session.createSqlQuery("sql语句");//看这个可以不
如果不行的话,那就没办法了。
再说了,执行sql语句,主要是编译语句比较费时点,少个字段多个字段几乎没啥关系
xiangfeidecainiao 2009-06-27
  • 打赏
  • 举报
回复
javamode

可是
他将我没有SET的值 ,在数据库中更新为NULL
这才是我郁闷的地方.
sangshusen_1988 2009-06-27
  • 打赏
  • 举报
回复
自己写hql就好啦
update test.my.war2tank.pojo.tank.Tank t set t.name = ? where t.id = ? //hql
javamode 2009-06-27
  • 打赏
  • 举报
回复
tank这个对象引用所引用的对象的属性值,只有你set过的 属性值才会改变,没有set还保持原来的值,虽然发送的sql语句所有字段都更新了,其实也只是改变了set过的值

举例说明
Tank() 里 有 id name weight
id=1
name = “tank1”
weight = “1200”
如果生成对象引用后
tank.setName="tank2"


session.update(tank);
发送的sql 应该是这样的 update tank set name="tank2",set weight="1200"
后只是更新了name字段 虽然sql也更改了weight 字段 但这是weight的值还是1200没有改变 所以也无所谓更新不更新了

希望我的解释还能让你看明白


xiangfeidecainiao 2009-06-27
  • 打赏
  • 举报
回复
Hibernate 中 update 了多余字段
请问在 调用 update 方法的时候。
我只设置了 tank.setName("坦克0101");
如何只set 设置了的属性。。

67,514

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧