Blog信息 |
blog名称: 日志总数:1304 评论数量:2242 留言数量:5 访问次数:7582039 建立时间:2006年5月29日 |

| |
[Hibernate]Hibernate 延迟初始化错误(ERROR LazyInitializer)是如何产生的? 软件技术, 电脑与网络
lhwork 发表于 2006/6/28 11:18:05 |
摘要: 延迟初始化错误是运用Hibernate开发项目时最常见的错误。如果对一个类或者集合配置了延迟检索策略,那么必须当代理类实例或代理集合处于持久化状态(即处于Session范围内)时,才能初始化它。如果在游离状态时才初始化它,就会产生延迟初始化错误。
延迟初始化错误(ERROR LazyInitializer)是如何产生的?
选自<<精通Hibernate:Java对象持久化技术详解>> 作者:孙卫琴 来源:www.javathinker.org
延迟初始化错误是运用Hibernate开发项目时最常见的错误。如果对一个类或者集合配置了延迟检索策略,那么必须当代理类实例或代理集合处于持久化状态(即处于Session范围内)时,才能初始化它。如果在游离状态时才初始化它,就会产生延迟初始化错误。
下面把Customer.hbm.xml文件的<class>元素的lazy属性设为true,表示使用延迟检索策略: <class name="mypack.Custome |
|
[Hibernate]Hibernate里面实现复杂的查询 软件技术, 电脑与网络
lhwork 发表于 2006/6/28 11:17:07 |
由于hibernate对sql的二次封装,使部分复杂的查询语句不能被执行,可以用hibernate的session实现!
第一种:查询结果集 Session session = this.getSession(); List result = new ArrayList(); String strSql = "select buy.i***n,buy.bookname,buy.bookengname,count(*) as counum "; strSql = strSql + " from (select distinct usee.i***n from StuBasicInfo stu,Teachingmaterialuse usee ";
strSql = strSql + " where stu.identityid = usee.identityid and
stu.deptid = '" + banji + "' and usee |
|
[Hibernate]在hibernate中调用数据库特殊函数 软件技术, 电脑与网络
lhwork 发表于 2006/6/28 11:15:38 |
SQL: select max(substring(b.serialNumber,1,16)) as maxsn from book_book b where b.serialNumber like 'XXXXXXX%' for update
因为Hibernate是与数据库无关的,而SUBSTRING这个特殊函数是用于特殊数据库的。
解决办法:
1)命名查询
<sql-query name="com.chineseall.domain.bo.Book.findMaxSNByMask"> <return-scalar column="maxsn" type="string"/> <![CDATA[ select max(substring(b.serialNumber,1,16)) as maxsn from book_book b where b.serialNumber like :mask for up |
|
[Hibernate]Hibernate 调用带有复合主键的stored procedure 软件技术, 电脑与网络
lhwork 发表于 2006/6/28 11:12:58 |
Mapping file: <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<!--
Created by the Middlegen Hibernate plugin 2.1
http://boss.bekk.no/boss/middlegen/
http://www.hibernate.org/
-->
<cla |
|
|