
Hibernate
cjmiou
自由在法律的辅佐下不应令人生畏,在一个自由的社会中,多样化不是混乱,辩论不是争斗,不同政见不是革命,一个自由的社会信任其公民,会在其自身和国家的身上寻找一个伟大的境界!
展开
-
hibernate lazy策略可以用在什么地方
hibernate lazy策略可以用在: 标签上,可以取值true/false 上,可以取值true/false需要类增强工具(用的很少) 标签上,可以取值:true/false/extra 单端关联上,可以取值:false/proxy/noproxyhibernate 3.X以上,lazy默认值为truelazy(代理)概念:只有真正使用该对象时,才会创建,对于h原创 2008-11-16 21:29:00 · 458 阅读 · 0 评论 -
hibernate一对一关联映射--
hibernate一对一主键关联映射(单向关联Person----->IdCard) 一对一主键关联映射:让两个实体对象的id保持相同, 这样可以避免多余字段被创建 具体的映射:class name="com.hibernate.Person" table="t_person"> id name="id"> generator class="fore原创 2008-11-16 21:28:00 · 414 阅读 · 0 评论 -
one-to-many 中的set不能用hashset
one-to-many 中的set不能用hashset,必须用Set这个接口 因为hibernate有延迟加载,实体对象实现了延迟加载,使用代理,集合它也有延迟加载,它对JDK中的set集合进行了扩展,它实现了延迟加载,所以不能用HashSet,必须用set 以上所说的都是指java.util里的类原创 2008-11-16 21:29:00 · 508 阅读 · 0 评论 -
每棵继承树映射成一张表
每棵继承树映射成一张表1、理解如何映射 因为类继承树肯定是对应多个类,要把多个类的信息存放在一张表中,必须有某种机制来区分哪些记录是属于哪个类的。 这种机制就是,在表中添加一个字段,用这个字段的值来进行区分。用hibernate实现这种策略的时候,有如下步骤: 父类用普通的标签定义 在父类中定义一个discriminator,即指定这个区分的字段的名称和类型原创 2008-11-16 21:30:00 · 424 阅读 · 0 评论 -
HQL实体对象查询
2、实体对象查询【重要】 * N + 1问题,在默认情况下,使用query.iterate查询,有可以能出现N+1问题 所谓的N+1是在查询的时候发出了N+1条sql语句 1: 首先发出一条查询对象id列表的sql N: 根据id列表到缓存中查询,如果缓存中不存在与之匹配的数据,那么会根据id发出相应的sql语句 * list和iterate的区别?原创 2008-11-16 21:32:00 · 1390 阅读 · 0 评论 -
HQL DML风格的查询及hibernate的局限性
11、DML风格的操作(尽量少用,因为和缓存不同步) 参见:DMLQueryTest.javasession.createQuery("update Student s set s.name=? where s.id .setParameter(0, "李四") .setParameter(1, 5)原创 2008-11-16 22:30:00 · 824 阅读 · 0 评论 -
session 生命周期的几个名字
transient状态的特征? * 在数据库中没有与之匹配的数据 * 没有纳入session的管理 persistent状态的特征? * persistent状态的对象在数据库中有与之匹配的数据 * 纳入了session的管理 * 在清理缓存(脏数据检查)的时候,会和数据库同步 detached状态的特征? * 在数据库中有与之匹配的数据 *原创 2008-11-16 21:26:00 · 454 阅读 · 0 评论 -
hibernate一对一唯一外键关联单向映射
hibernate一对一唯一外键关联映射(单向关联Person---->IdCard)一对唯一外键关联映射是多对一关联映射的特例可以采用标签,指定多的一端的unique=true,这样就限制了多的一端的多重性为一通过这种手段映射一对一唯一外键关联原创 2008-11-16 21:28:00 · 505 阅读 · 0 评论 -
HQL简单属性查询
1、简单属性查询【重要】 * 单一属性查询,返回结果集属性列表,元素类型和实体类中相应的属性类型一致 session.beginTransaction ( ); //下面的student是实体不是表名; List list = session.createQuery ("select name from Student").list ( );原创 2008-11-16 21:30:00 · 688 阅读 · 0 评论 -
hibernate二级缓存
hibernate二级缓存二级缓存也称进程级的缓存或SessionFactory级的缓存,二级缓存可以被所有的session共享二级缓存的生命周期和SessionFactory的生命周期一致,SessionFactory可以管理二级缓存二级缓存的配置和使用: * 将echcache.xml文件拷贝到src下 * 开启二级缓存,修改hibernate.cfg.xml文件(其实默认就是开启原创 2008-11-16 22:32:00 · 560 阅读 · 0 评论 -
session.get()和session.load()的区别
get()----不支持LAZYUser user = (User)session.get(User.class, "402880d01b9bf210011b9bf2a2ff0001");当调用上面的方法时,马上发出查询sql,加载User对象user.setName("龙哥");persistent状态,当属性发生改变的时候,hibernate会自动和数据库同步User user = (User原创 2008-11-16 21:23:00 · 951 阅读 · 0 评论 -
HQL查询过滤器
6、查询过滤器 * 在映射文件中定义过滤器参数 * 在类的映射中使用这些参数 * 在程序中启用过滤器 参见:Student.hbm.xml、FilterQueryTest.java============================================================= class name="com.bjsxt.hiberna原创 2008-11-16 22:07:00 · 594 阅读 · 0 评论 -
一级缓存
hibernate一级缓存 一级缓存很短和session的生命周期一致,一级缓存也叫session级的缓存或事务级缓存那些方法支持一级缓存: * get() * load() * iterate(查询实体对象)Iterator查询普通属性,一级缓存不会缓存,所以会发出SQL,一级缓存是缓存实体对象的 如何管理一级缓存: * session.clear(),ses原创 2008-11-16 22:31:00 · 710 阅读 · 0 评论 -
采用编程式事务
采用编程式事务1、getCurrentSession()与openSession()的区别? * 采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession() 创建的session则不会 * 采用getCurrentSession()创建的session在commit或rollback时会自动关闭,而采用openSessi原创 2008-11-16 22:33:00 · 416 阅读 · 0 评论 -
Hibernate 最佳实践(Best Practices)
1。使用Configuration装载映射文件时,不要使用绝对路径装载。最好的方式是通过getResouceAsStream()装载文件,这样Hibernae会从Classpath中寻找已配置的映射文件。2。SessionFactory的创建非常消耗资源,整个应用一般只要一个SessionFactory就够了,只有多个数据库时才会使用多个SessionFactory3。在整个应用中,Session原创 2008-11-16 22:33:00 · 491 阅读 · 0 评论