Hibernate报错:找不到net.sf.hibernate.dialect.MySQLDialect
百度了下……原来Hibernate 3.x以上已经不用net.sf.hibernate.dialect.MySQLDialect了,而是用org.hibernate.dialect.MySQLDialect,
修改hibernate.cfg.xml,再启动即正常运行 = =。
Hibernate 懒加载
Lazy的概念就是只有在真正使用对象时,才会去创建。
对hibernate而言,就是真正加载时才发出加载Sql语句。 延迟加载机制是为了避免一些无谓的性能开销而提出来的。
重点牢记
1.Load支持延迟加载,get不支持延迟加载。
2.lazy的生命周期与session相同,lazy加载必须依赖于session一直开启。
3.Hibernate lazy属性,在3.x后是默认打开的,在以前版本中默认是关闭的。
4.hibernate通过cjlib实现代理。
Hibernate 使用字符串作为主键
小笔记下,生成ORM的时候类型使用assigned即可。
a different object with the same identifier value was already associated with the session
javax.servlet.ServletException: org.springframework.orm.hibernate3.HibernateSystemException: a different object with the same identifier value was already associated with the session
错误原因:在hibernate中同一个session里面有了两个相同标识但是是不同实体。
Spring+Hibernate查询复合主键报错
原本在C/S项目中的测试通过,但是在转换到B/S的时候就报错了,
复合主键的查询代码是
-
/**
-
* 获得指定编号的种别
-
* @param sortID
-
* @param category
-
* @return
-
*/
-
InstrumentSort sort = new InstrumentSort();
-
sort.setSortId(sortID);
-
sort.setInstrumentCategory(category);
-
return (InstrumentSort) this.getHibernateTemplate().getSessionFactory().getCurrentSession().load(InstrumentSort.class, sort);
-
}
其中sortID和category是InstrumentSort的主键。
报的错误是org.hibernate.LazyInitializationException: could not initialize proxy - no Session
于是在InstrumentSort.hbm.xml的<hibernate-mapping>里加上了 default-lazy="false" 属性 就成功了 囧rz 原因为啥不知
【备忘】Hibernate生成的model比较Integer要记得用equals啊……
rt
Hibernate的set排序
在对应的hbm.xml文件中所需要修改的set标签加上order-by属性即可~
eg.
<key>
<column name="classID" not-null="true" unique="true" />
</key>
<one-to-many class="org.banana.mms.model.Course" />
</set>
当然,order-by里用的是中间表的字段~
Hibernate 子查询
假设现在有一个Clazz类表示班级,一个Course类表示课程,一个Room表示教室,
Clazz-Room 1:n
Clazz-Course 1:n
要查询指定时间week和指定教室编号(都存储在course表中)的班级只需
注意要给Clazz一个别名~这样才能在子查询中使用。