先看下过程
sort.java
public class Sort implements Serializable {
private int id;
private String name;
private int grade;//类别等级
private String descr;
private Sort sort;//父类
private List sorts=new ArrayList();//子类
public int getId() {
......
}
}
sort.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- DO NOT EDIT: This is a generated file that is synchronized -->
<!-- by MyEclipse Hibernate tool integration. -->
<!-- Created Sun Jan 29 11:50:19 GMT-08:00 2006 -->
<hibernate-mapping package="po">
<class name="Sort" table="t_sort">
<id name="id" column="id" type="int">
<generator class="native"/>
</id>
<property name="name" column="name" type="string" not-null="true" />
<property name="grade" column="grade" type="int" not-null="true" />
<property name="descr" column="descr" type="string" not-null="true" />
<many-to-one name="sort" class="Sort">
<column name="pid"></column>
</many-to-one>
<list name="sorts" cascade="all" >
<key>
<column name="pid"></column>
</key>
<list-index>
<column name="sort_index" ></column>
</list-index>
<one-to-many class="Sort" />
</list>
</class>
</hibernate-mapping>
web.xml
<!-- 解决hiberbate lazy问题-->
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>util.MyOpenSessionInView</filter-class>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
MyOpenSessionInView.java
public class MyOpenSessionInView extends OpenSessionInViewFilter {
@Override
protected Session getSession(SessionFactory sessionFactory)
throws DataAccessResourceFailureException {
Session session=SessionFactoryUtils.getSession(sessionFactory, true);
session.setFlushMode(FlushMode.COMMIT);
return session;
}
protected void closeSession(Session session, SessionFactory factory) {
session.flush();
super.closeSession(session, factory);
}
}
MyOpenSessionInView.java 类是为了解决下面的错误问题。下面的问题的解决办法也有几种,在我的其他转载文章中有提到。
org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER) - turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition
在hibernate 删除关联时会出现
eleted object would be re-saved by cascade (remove deleted object from associations)
的异常,结合别人的和自己的经验通常有三种解决的方案:
方法1 删除Set方的cascade:
方法2 解决关联关系后,再删除
onside.getManys().remove(thisMany); //在所关联的一方的set中移走当前要删除的对象
thisMany.setOne(null); //设置所对应的一方为空,解除它们之间的关系
manyDao.delete(thisMany);
方法3 在many-to-one方增加cascade 但值不能是none
以上是我用的第2种方法的一种改进,因为在第二种方法来做的时候依然会报
eleted object would be re-saved by cascade (remove deleted object from associations)
的异常,所以我采取的办法是
public void deleteByid(int sortid) {
this.getHibernateTemplate().delete(this.getSort(sortid));
this.getSession().flush();
}
和上面的的
<list name="sorts" cascade="all" >
这样既解决了删除的级联,也消除了上面的异常。
以上纯属个人的尝试,由于经验较少,错误的地方请指教。
分享到:
相关推荐
Open Session in View模式.PPT
struts2+hibernate3 做的小项目 使用了struts2插件实现pen session in view
在没有使用Spring提供的Open Session In View情况下,因需要在service(or Dao)层里把session关闭,所以lazy loading 为true的话,要在... Open Session In View提供了一种简便的方法,较好地解决了lazy loading问题.
niUSRP open session in labview
下载此文件,然后直接双击运行,就可以去掉右键菜单中的“open in visual studio"选项
Advances and Open Problems in Federated Learning。Federated learning (FL) is a machine learning setting where many clients (e.g. mobile devices or whole organizations) collaboratively train a model ...
重定向的时候是有session丢失的问题;window.open丢失session问题;使用框架(Frameset)调用不同域名下的页面,会出现此域下页面的Cookies和Session丢失的现象。
Advances and Open Problems in Federated Learning
open data structure (in c++)
现在Ajax在Web项目中应用广泛,几乎可以说无处不在,这就带来另外一个问题:当Ajax请求遇到Session超时,应该怎么办? 显而易见,传统的页面跳转在此已经不适用,因为Ajax请求是XMLHTTPRequest对象发起的而不
带有spring.jpa.open-in-view和JDBCTemplate的意外问题的复制者这个仓库是一个最小的Spring Boot应用程序,可以重现我在spring.jpa.open-in-view设置为true的真实应用程序中遇到的问题(如果Spring Boot JPA Starter...
Open IFrame In News Table 一款Chrome扩展插件,通过该插件可以右键将网页嵌入的 IFrame 框架 快速使用 新tab 页签打开。
前端开源库-open-in-editor在编辑器中打开,在编辑器中打开文件
// is a session with this id in the database? $res = @mysql_query("SELECT * FROM ".self::db_table." WHERE session_id = '$sessID'", $this->db_handle); // if yes, if(@mysql_num_rows($res)) { ...
Openstack openvswitch neutron Openstack openvswitch neutron
通过图文结合此文档记录了OpenAcs搭建的详细步骤,想要在Windows平台上搭建一个OpenAcs的测试环境,测试CPE功能的,可供参考。
HP OpenView 网络管理软件的资料文档,中英文
联邦学习Advances and Open Problems in Federated Learning,谷歌最新力作,分析了联邦学习最新研究热点和未来的方向
OPEN3000平台技术手册,详细的开发路线和文档
OpenRTB, OpenRTB项目的文档和问题跟踪 OpenRTB规范OpenRTB文档和问题跟踪的主页有关一般信息,请参见 openrtb 。github/openrtb 。要提交一个问题,请使用 GitHub发布问题。OpenRTB有两个你可以加入的邮件列表:...