hibernate3.0 dynamic-update="true" 无效

zhanggc1001 2008-10-20 03:22:42
配置文件

<class
name="org.model.Customer"
table="customers"
lazy="false"
dynamic-update="true"
dynamic-insert="true"
>

<id
name="id"
type="java.lang.String"
column="ID"
>

<generator class="uuid.hex" />
</id>

<property
name="name"
type="java.lang.String"
column="NAME"
length="15"
/>
<property
name="sex"
type="java.lang.String"
column="SEX"
length="1"
/>
<property
name="description"
type="java.lang.String"
column="DESCRIPTION"
length="65535"
/>

<!-- Associations -->

<!-- bi-directional one-to-many association to Order -->

<set
name="orders"
lazy="true"
inverse="true"
cascade="all"

>
<key>
<column name="CUSTOMER_ID" />
</key>

<one-to-many
class="org.model.Order"
/>
</set>

</class>

java代码:

package test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.model.Customer;

public class Test {

private static SessionFactory sessionFactory;
static{
sessionFactory = new Configuration().configure().buildSessionFactory();
}


public void createNewCustomer(Customer c){
Session sess = sessionFactory.openSession();
Transaction tx = sess.beginTransaction();
sess.save(c);
tx.commit();
}

public void updateCustomer(Customer c ){
Session sess = sessionFactory.openSession();
Transaction tx = sess.beginTransaction();
sess.update(c);
tx.commit();
}


public static void main(String[] args) {
Test t = new Test();
Customer c = new Customer();
c.setId("8a8482d51d18ec17011d18ec1a750001");
c.setDescription("sdfsdfdsfsdf");
t.updateCustomer(c);
}
}



运行结果:
Hibernate: update customers set NAME=?, SEX=?, DESCRIPTION=? where ID=?
应该是update customers set DESCRIPTION=? where ID=? 这样才对吧
...全文
842 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dynastysea 2012-04-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

我也遇到这个问题了,不知道楼主解决了没?
[/Quote]
不能跨session使用,只能在同一个session域内才有效
IccBoY 2012-04-01
  • 打赏
  • 举报
回复
我也遇到这个问题了,不知道楼主解决了没?
zhanggc1001 2008-10-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ol_soft 的回复:]
输出结果没错,因为你new了一个Customer c ,你并没有从数据库中load或者get这个实体,所以缓存上没有这个实体,session就根据id更新c中所有的属性
[/Quote]
那hibernate的更新操作是不相当于先查询(把游离态转换成持久化的),然后进行更新操作呢!
ol_soft 2008-10-20
  • 打赏
  • 举报
回复
输出结果没错,因为你new了一个Customer c ,你并没有从数据库中load或者get这个实体,所以缓存上没有这个实体,session就根据id更新c中所有的属性
zhanggc1001 2008-10-20
  • 打赏
  • 举报
回复
什么错误都没有
运行显示的sql就是Hibernate: update customers set NAME=?, SEX=?, DESCRIPTION=? where ID=? 这样的
不知道是什么原因
lihan6415151528 2008-10-20
  • 打赏
  • 举报
回复
你出什么错了?

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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