Hibernate笔记

xiaoxiao2022-06-22  36

1.org.hibernate.MappingException: Unknown entity: Xxx 没有在hibernate.cfg.xml中定义类Xxx对应的Xxx.hbm.xml位置. 2.org.hibernate.HibernateException: Hibernate Dialect must be explicitly set 没有指定hibernate.cfg.xml位置, new Configuration().configure()默认指定为hibernate.cfg.xml Configuration c = new Configuration().configure(); SessionFactory sf = c.buildSessionFactory(); 3.load()/get()区别 load先查缓存如果缓存中存在就直接返回缓存中的ID对应的对象; 如果缓存中不存在就判断lazy; 如果lazy = true,则不报任何异常,继续执行下面代码,而在下面访问该对象属性的时候,如果数据库中记录不存在就会抛出org.hibernate.ObjectNotFoundException异常,如果数据库中记录存在,则返回相应记录; 如果lazy = false, 则直接查询数据库,如果数据库中记录不存在则抛出异常org.hibernate.ObjectNotFoundException: No row with the given identifier exists,如果数据库中记录存在,则返回相应记录 get()方法如果找不到记录将返回null,但也可能抛出ObjectNotFoundException异常(如先load后get) 举例: load取缓存中数据 Person p1 = (Person)s.load(Person.class, "00004");//取不到缓存中数据,lazy = true ,不执行sql,所以不出异常 Person p2 = (Person)s.load(Person.class, "00004");//查询缓存,得到数据,不执行sql,不出异常 System.out.println(p1==p2);//结果是true,因为p1,p2是缓存中同一个对象 延迟加载1 Person p1 = (Person)s.load(Person.class, "00004");//取不到缓存中数据,lazy = true,不执行sql,所以不出异常 Person p2 = (Person)s.load(Person.class, "00004");//取到缓存中数据,不出异常 System.out.println(p1==p2);//结果是true,因为p1,p2是缓存中同一个对象 System.out.println(p1.getUserName());//访问p1属性,执行sql,加载p1,数据库中不存在记录,则抛出ObjectNotFoundException异常 延迟加载2 Person p1 = (Person)s.load(Person.class, "00004");//取不到缓存中数据,lazy = true,不执行sql,所以不出异常 Person p2 = (Person)s.load(Person.class, "00004");//取到缓存中数据,不出异常 System.out.println(p1==p2);//结果是true,因为p1,p2是缓存中同一个对象 System.out.println(p2.getUserName());//访问p2属性,执行sql,加载p2,数据库中不存在记录,则抛出ObjectNotFoundException异常 get方法直接访问数据库1 Person p1 = (Person)s.get(Person.class, "00004");//执行sql,如果记录不存在,返回空指针null Person p2 = (Person)s.load(Person.class, "00004");//取不到缓存中数据,lazy = true ,不执行sql,所以不出异常 System.out.println(p1==p2);//结果是false System.out.println(p1.getUserName());//p1记录为null,抛出空指针异常 get方法直接访问数据库2 Person p1 = (Person)s.get(Person.class, "00004");//执行sql,如果记录不存在,返回空指针null Person p2 = (Person)s.load(Person.class, "00004");//取不到缓存中数据,lazy = true ,不执行sql,所以不出异常 System.out.println(p1==p2);//结果是false System.out.println(p2.getUserName());//访问p2属性,执行sql,加载p2,数据库中不存在记录,则抛出ObjectNotFoundException异常 load方法1 Person p1 = (Person)s.load(Person.class, "00004");//取不到缓存中数据,lazy = true ,不执行sql,所以不出异常 Person p2 = (Person)s.get(Person.class, "00004"); //查缓存获得p1_proxy,访问p1属性,执行sql,加载p1,数据库中不存在记录,则抛出ObjectNotFoundException异常????还是使用p1时的proxy System.out.println(p1==p2);//不执行,其实p1,p2是一个对象 System.out.println(p1.getUserName());//不执行 load方法2 Person p1 = (Person)s.load(Person.class, "00004");//取不到缓存中数据,lazy = true ,不执行sql,所以不出异常 Person p2 = (Person)s.get(Person.class, "00004"); //查缓存获得p1_proxy,访问p1属性,执行sql,加载p1,数据库中不存在记录,则抛出ObjectNotFoundException异常????还是使用p1时的proxy System.out.println(p1==p2);//不执行,其实p1,p2是一个对象 System.out.println(p2.getUserName());//不执行Person p1 = (Person)s.load(Person.class, "00004");//取不到缓存中数据,lazy = true ,不执行sql,所以不出异常 Person p2 = (Person)s.get(Person.class, "00004"); //查缓存获得p1_proxy,访问p1属性,执行sql,加载p1,数据库中不存在记录,则抛出ObjectNotFoundException异常????还是使用p1时的proxy System.out.println(p1==p2);//不执行,其实p1,p2是一个对象 System.out.println(p1.getUserName());//不执行 get方法 Person p1 = (Person)s.get(Person.class, "00004");//返回null Person p2 = (Person)s.get(Person.class, "00004"); //查缓存获得p1 System.out.println(p1==p2);//p1,p2是一个对象 System.out.println(p2.getUserName());//空指针异常 上面都是访问非主键属性,如果是访问主键的话是不会真正去查询数据库的,因为本身'00004'已经放在了缓存中. 4:org.hibernate.InvalidMappingException: Could not parse mapping document from resource com/example/datamodel/Person.hbm.xml hbm.xml中类路径应写全 5:org.hibernate.HibernateException: More than one row with the given identifier was found: 000002, for class: com.example.datamodel.Person 记录不唯一不能使用load 6: 临时状态 new Person(),new Person('aaa','000'); 持久状态 游离状态 关闭 本文来自博客,转载请标明出处:http://blog.csdn.net/lsj19830812/archive/2008/01/16/2046810.aspx 相关资源:hibernate笔记
转载请注明原文地址: https://www.6miu.com/read-4951160.html

最新回复(0)