Hibernate4实战 之 第三部分:Hibernate的基本开发


<query name="javass"><![CDATA[select Object(o) from UserModel o]]></query>参数绑定及执行以编程方式完成:List list = s.getNamedQuery("cn.javass.h3.hello.UserModel.javass").list();注意要用全限定名加名称的方式进行访问?ClassMetadata catMeta = sf.getClassMetadata(UserModel.class);String[] propertyNames = catMeta.getPropertyNames();Type[] propertyTypes = catMeta.getPropertyTypes();for (int i = 0; i < propertyNames.length; i++) {System.out.println("name=="+propertyNames[i] + ", type==“ +propertyTypes[i]);} from Cat as catinner join fetch cat.mateleft join fetch cat.kittens<sql-query name="users"><return alias="um" name="code"><sql-query name="users"><return alias="um" column="umName"></return-property><return-property name="uuid" column="uuid"></return-property><return-property name="age" column="age"></return-property></return>select um.name as umName,um.age as age,um.uuid as uuidfrom tbl_user umwhere um.name like :name</sql-query>Criteria crit = sess.createCriteria(Cat.class);crit.setMaxResults(50);List cats = crit.list();限制结果集内容一个单独的查询条件是org.hibernate.criterion.Criterion 接口的一个实例org.hibernate.criterion.Restrictions类 定义了获得某些内置Criterion类型的工厂方法。List list = s.createCriteria(UserModel.class).add(Restrictions.eq("uuid", "3")).add(Restrictions.like("name", "%n%")).list();约束可以按照逻辑分组,示例如下:List cats = sess.createCriteria(Cat.class).add( Restrictions.like("name", "Fritz%") ).add( Restrictions.or(Restrictions.eq( "age", new Integer(0) ),Restrictions.isNull("age") )).list();List cats = sess.createCriteria(Cat.class).add( Restrictions.like("name", "F%").addOrder( Order.asc("name") ).addOrder( Order.desc("age") ).setMaxResults(50).list();Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); for ( int i=0; i<100000; i++ ) { Customer customer = new Customer(.....); session.save(customer);}tx.commit();session.close();这个程序很显然不能正常运行,会抛出内存溢出的例外。按照前面讲过的原理,Hibernate的save方法是先把数据放到内存里面,数据太多,导致内存溢出。那么该如何解决呢?for ( int i=0; i<100000; i++ ) {Customer customer = new Customer(.....);session.save(customer);if ( i % 20 == 0 ) {//将本批数据插入数据库,并释放内存session.flush();session.clear();}}StatelessSession session = sessionFactory.openStatelessSession();Transaction tx = session.beginTransaction();ScrollableResults customers = session.getNamedQuery("GetCustomers") .scroll(ScrollMode.FORWARD_ONLY);while ( customers.next() ) {Customer customer = (Customer) customers.get(0);customer.updateStuff(...);session.update(customer);} tx.commit(); session.close(); ?原创内容 转自请注明【http://sishuok.com/forum/blogPost/list/2477.html#7149】视频配套PPT,视频地址【?Hibernate4实战-独家视频课程?】