`
文章列表
List students = session.createSQLQuery("select * from t_student").list();session.createQuery是不支持*查询的,想使用原生的SQL则要使用上面的方法,注意,此时from后面接的应该是表名了,而不是实例名
5、外置命名查询 * 在映射文件中采用<query>标签来定义hql * 在程序中采用session.getNamedQuery()方法得到hql查询串 参见:Student.hbm.xml、NameQueryTest.java Liststudents=session.getNamedQuery("searchStudents") .setParameter(0,10) .list(); for(Iteratoriter=students.iterator();iter.hasNext();){ Studentstudent=(Student)ite ...
3、条件查询【重要】 * 可以采用拼字符串的方式传递参数 * 可以采用 ?来传递参数(索引从0开始) * 可以采用 :参数名 来传递参数 * 如果传递多个参数,可以采用setParamterList方法 * 在hql中可以使用数据库的函数,如:date_format 参见:SimpleConditionQueryTest.java ================================================================ A: //可以拼字符串 Liststudents=session.createQuery("selects.id,s ...
2、实体对象查询【重要】 * N + 1问题,在默认情况下,使用query.iterate查询,有可以能出现N+1问题 所谓的N+1是在查询的时候发出了N+1条sql语句 1: 首先发出一条查询对象id列表的sql N: 根据id列表到缓存中查询,如果缓存中不存在与之匹配的数据,那么会根据id发出相应的sql语句 * list和iterate的区别? * list每次都会发出sql语句,list会向缓存中放入数据,而不利用缓存中的数据 * iterate:在默认情况下iterate利用缓存数据,但如果缓存中不存在数据有可以能出现N+1问题 参见:SimpleObjectQueryTes ...
hibernate支持LAZY策略只有在session打开的状态下才有效如:.....finally{ session.close();}System.out.prinltn(group.getName());就会抛异常,因为此时session已经关闭
每棵继承树映射成一张表1、理解如何映射 因为类继承树肯定是对应多个类,要把多个类的信息存放在一张表中,必须有某种机制来区分哪些记录是属于哪个类的。 这种机制就是,在表中添加一个字段,用这个字段的值来进行区分。用hibernate实现这种策略的时候,有如下步骤: 父类用普通的<class>标签定义 在父类中定义一个discriminator,即指定这个区分的字段的名称和类型 如:<discriminator column=”XXX” type=”string”/> 子类使用<subclass>标签定义,在定义subclass的时候,需要注意如下几点: Subc ...
1、简单属性查询【重要】 * 单一属性查询,返回结果集属性列表,元素类型和实体类中相应的属性类型一致   session.beginTransaction(); //下面的student是实体不是表名; Listlist=session.createQuery("selectnamefromStudent").list(); for(Iteratorit=list.iterator();it.hasNext();) { Stringname=(String)it.next(); System.out.println(name); } * 多个属性查询,返回的集 ...
one-to-many 中的set不能用hashset,必须用Set这个接口 因为hibernate有延迟加载,实体对象实现了延迟加载,使用代理,集合它也有延迟加载,它对JDK中的set集合进行了扩展,它实现了延迟加载,所以不能用HashSet,必须用set 以上所说的都是指java.util里的类
hibernate lazy策略可以用在:  <class>标签上,可以取值true/false <property>上,可以取值true/false需要类增强工具(用的很少)  <set><list>标签上,可以取值:true/false/extra <one-to-one><manay-to-one>单端关联上,可以取值:false/proxy/noproxyhibernate 3.X以上,lazy默认值为truelazy(代理)概念:只有真正使用该对象时,才会创建,对于hibernate而言,真正使用的时候才会发出sq ...
hibernate一对一主键关联映射(单向关联Person----->IdCard) 一对一主键关联映射:让两个实体对象的id保持相同, 这样可以避免多余字段被创建 具体的映射: <classname="com.hibernate.Person"table="t_person"> <!--需要给id定一个名字并且要与IdCard中的id的名字一致,否则会出错--> <idname="id"> <!--person的主键来源idCard,也就是 ...
hibernate一对一唯一外键关联映射(单向关联Person---->IdCard) 一对唯一外键关联映射是多对一关联映射的特例 可以采用<many-to-one>标签,指定多的一端的unique=true,这样就限制了多的一端的多重性为一通过这种手段映射一对一唯一外键关联
transient状态的特征? * 在数据库中没有与之匹配的数据 * 没有纳入session的管理persistent状态的特征? * persistent状态的对象在数据库中有与之匹配的数据 * 纳入了session的管理 * 在清理缓存(脏数据检查)的时候,会和数据库同步detached状态的特征? * 在数据库中有与之匹配的数据 * 没有纳入session的管理
session如果出现异常后,一般不建议再用该session
hibernate多对一关联映射关联映射的本质: * 将关联关系映射到数据库,所谓的关联关系是对象模型在内存中的一个或多个引用<many-to-one>会在多的一端加入一个外键,指向一的一端,这个外键是由<many-to-one>中的column属性定义的,如果忽略了这个属性那么默认的外键与实体的属性一致<many-to-one>标签的定义示例: <many-to-onename="group"column="groupid"/> 下面这种方法可以让程序不先savegroup,直接saveuser,上面的 ...
junit.framework.TestCase--需要继承的类编写测试类XXXTest,需要继承上面的类编写单元测试方法,测试方法需要以test开头,测试方法不能含有参数和返回值,如:public void testHello(){}最好单元测试的代码单独建立一个目录,包名应当与原码中的包名一致,以便测试
Global site tag (gtag.js) - Google Analytics