j2ee 70個問題中有詳細的解釋這個問題! 請參考!
解决方案 »
- JAVA多服务器间的对象传递
- 会tapestry5的进来看看,谢谢了,刚开始接触这个(关于.tml页面膜板调用js的问题)
- hibernate的lazy不让设成true,怎么回事呢?
- java公司一般都采用哪个业务流程管理工具呢?
- mysql 大小写不敏感,怎么办?
- 求助!!axis 四种实现方式。。document,wrapped方式怎么实现?
- 学习jfreechart遇到麻烦,高手们给指点一下!
- struts+tiles的链接问题
- 哪里有Master EJB2 中文版下载?
- 做EJB,看什么参考书比较好?
- ActiveMQ如何做集群,谁有文档可以提供啊
- 关于liferay portal中开发的portlet的标题乱码
以下是具体的例子说明p155 :Customer:
ID NAME
1 jackyorder:
ID ORDER_NUMBER CUSTOMER_ID(FK)
1 jacky_order001 null
以下操作会使 SQL 出现两次重复抄作:
Tx =session.beginTransaction();
Customer customer = (Customer) session.load(Customer.class,new Long(1));
Order order = (Order) session.load(Order.class,new Long(1));
//建立两个对象之间的关系
order.setCustomer(customer);
customer.getOrders().add(order);
tx.commit();
会执行两句SQL
Update orders set ORDER_NUMBER =’ jacky_order001’, CUSTOMER_ID=1 where ID =1;
Update orders set CUSTOMER_ID=1 where ID =1;
因为在建立关系的时候hibernate 探测到两个持久化类的状态都发生了变化,所以做出相应的持久化动作。
这个不利java的性能。
解决的办法是将:one 方(customer)的<set>元素加入 inerse=”true”属性,那么hibernate只会当many(order)方的状态发生变化时才做出反应。
在关联的时候靠父方来维持关联关系。
inverse="true"
在关联关系中靠子方来维持关联关系。