hibernate
半壁灯
半壁青灯论天下,荒烟蔓草尽识君
展开
-
Hibernate——数据库表名和类名不一致
注解Annotation的解决方法,xml不做讨论hibernate文档推荐使用javax.persistence而不是org.hibernate.annotation如果数据库表名和类名不一样,可在类前面加上注解@Table如,@Table(name="_student") //表示Student类对应_student这张表如果字段名不一样@C原创 2017-06-28 20:33:39 · 4010 阅读 · 0 评论 -
Hibernate4较于Hibernate3的改动
Hibernate4的改动较大只有spring3.1以上版本能够支持,Spring3.1取消了HibernateTemplate,因为Hibernate4的事务管理已经很好了,不用Spring再扩展了。这里简单介绍了hibernate4相对于hibernate3配置时出现的错误,只列举了问题和解决方法,详细原理如果大家感兴趣还是去自己搜吧,网上很多。1、Spring3.1去掉了Hibe转载 2017-07-17 18:12:43 · 389 阅读 · 0 评论 -
Hibernate——一级缓存__二级缓存__查询缓存
一级缓存session级别缓存@Test public void testCache() { testSaveGroup(); Session session = sf.getCurrentSession(); session.beginTransaction(); Group g = (Group)session.get(Grou原创 2017-07-21 18:19:52 · 541 阅读 · 0 评论 -
Hibernate——如何使用二级缓存
(一)在hibernate-release-4.2.21.Final\project\etc目录下找到ehcache.xml文件,复制到项目的src目录下。 ehcache.xml中的内容(使用时记得把注释去掉)<defaultCache maxElementsInMemory="10000" <!-- 可以缓存的对象数量 --> eternal="false"原创 2017-07-21 18:51:22 · 406 阅读 · 0 评论 -
Hibernate——ManyToOne双向关联
@Entity@Table(name="t_group")public class Group { private int id; private String name; private Set users = new HashSet(); @Id @GeneratedValue public int getId() { return id; } public v原创 2017-07-18 18:03:47 · 365 阅读 · 0 评论 -
Hibernate——关联关系的CRUD(增删改查)一
两张ManyToOne双向关联的表Group和User(一)增通过保存user把group也保存@Test public void testSaveUser() { User u = new User(); Group g = new Group(); u.setName("u1"); g.setName("g1"); u.setGroup(g);原创 2017-07-18 20:13:10 · 446 阅读 · 0 评论 -
HIbernate——事务并发问题及处理(乐观锁悲观锁)
一、事物并发三种常见问题1.dirty read 脏读 时间 事物A 事物B T1 开始事物 开始事物 T2 查询账户余额为1000 T3 汇入100把余额变为1100 T4 读取账户余额为1100 T5 回滚 T6 取款1100 T7 提交事物失败 事物A读到了事物B还没有提交的数据2.non原创 2017-07-22 18:36:18 · 1614 阅读 · 0 评论 -
Hibernate——关联关系的CRUD(增删改查)二
(三)改通过更新user来更新group@Test public void testUpdateUser() { testSaveGroup(); Session session = sf.getCurrentSession(); session.beginTransaction(); User u = (User)session.get(User.class, 1原创 2017-07-19 15:41:55 · 337 阅读 · 0 评论 -
Hibernate——树状映射
在同一个类中使用ManyToOne和OneToMany@Entitypublic class Org { private int id; private String name; private Set children =new HashSet(); private Org parent; @Id @GeneratedValue public int getId() {原创 2017-07-19 18:19:52 · 413 阅读 · 0 评论 -
Hibernate——1+N问题
什么是1+N问题oneToMany(默认fetch=FetchType.LAZY)或者ManyToOne(默认fetch=FetchType.EAGER)在fetch=EAGER时,查询其中一方,由于关联关系的存在另一方中的n个对象也会被取出本来只要发一条sql语句,现在多发了n条解决方法1)fetch设成LAZY2)做外连接查询List原创 2017-07-20 15:46:12 · 382 阅读 · 0 评论 -
Hibernate4中SessionFactory已过时
hibernate3.6之后Annotation类库集成到了hibernate中,不用再添加hibernate-annotation.jar和hibernate-common-annotation.jar类包。所以Configuration cfg = new AnnotationConfiguration();的写法也废弃了,直接Configuration cfg = new Configu原创 2017-06-25 00:00:15 · 1662 阅读 · 0 评论 -
Hibernate——flush()方法强制同步数据库
@Test public void testFlush() { Session session = sf.getCurrentSession(); session.beginTransaction(); Student s = (Student)session.load(Student.class, 2); s.setName("ss"); s.setName("sss原创 2017-07-01 13:59:32 · 3261 阅读 · 1 评论 -
HIbernate——ID自动生成
Annotation实现,xml不做讨论1.@GeneratedValue//id自动增长(常用。默认为auto,在MySQL中为auto_increment;在Oracle中为sequence)不同的数据库平台方法不同2.@TableGenerator(name="Student_GEN", //生成器的名字table="GENERATOR_TABLE",原创 2017-06-28 21:05:22 · 1787 阅读 · 0 评论 -
Hibernate——SessionFactory产生session的两种方法
SessionFactory可以简单理解为数据库的连接池,用于产生session产生session有两种方法(1)Session session = sf.openSession();(2)Session session = sf.getCurrentSession();openSession每次都创建一个新的session,需要手动closegetCurren原创 2017-06-28 22:36:30 · 945 阅读 · 0 评论 -
Hibernate——JTA
上一篇提到的配置文件中的thread//当前的session的运行环境有四种取值jta、thread、managed、custom.Class常用thread和jta我们一般将事物分为两种1.connection事物,依赖数据库本身,只针对一个数据库2.jta事物,分布式,不止一个数据库假如要向两个数据库BD1和DB2中分别执行两个操作,一个操作原创 2017-06-29 15:32:02 · 469 阅读 · 0 评论 -
Hibernate——对象的三种状态
transient(瞬态) 内存中有一个对象,无idpersistent(持久化)内存中有一个对象,有id,缓存中有,数据库中有detached(分离) 内存中有一个对象,有id,缓存中没,数据库中有public void test() { Student s = new Student(); s.setName("lll"); s.setAg原创 2017-06-30 10:14:23 · 305 阅读 · 0 评论 -
Hibernate——load方法和get方法的异同
从数据库取一条记录出来一般有两种方法1.load()方法Student s = (Student)session.load(Student.class, 1);2.get()方法Student s = (Student)session.get(Student.class, 1);load()或者get()之后,对象是persistent状态原创 2017-06-30 19:22:14 · 572 阅读 · 0 评论 -
Hibernate——三种状态下的update()方法
1.transient状态更新transient对象会报错。更新自己设定id的transient对象可以(数据库有对应记录)更新后除了设定更新的字段,其他字段会重置成null原创 2017-06-30 20:47:44 · 2721 阅读 · 0 评论 -
Hibernate——仅更新部分字段
介绍两种方法1.Annotation设定@Column(updatable=false)在不需要更新的属性上添加这个注解。这种方法不灵活,很少使用。2.使用HQL@Test public void testUpdate4() { Session session = sf.getCurrentSession(); session.beginTransaction()原创 2017-06-30 22:41:09 · 444 阅读 · 0 评论 -
Hibernate——clear()方法清除缓存
@Test public void testClear() { Session session = sf.getCurrentSession(); session.beginTransaction(); Student s = (Student)session.load(Student.class, 2); System.out.println(s.getName());原创 2017-07-01 10:44:12 · 3390 阅读 · 0 评论 -
HIbernate——list和iterator的区别
一、先介绍一下Java中的缓存系统JCS(Java cache system) 1、JCS(java Caching System)是一个对象Cache,它可以把Java对象缓存起来,提高那些访问频率很高的Java对象的存取效率。JCS是按照对象的唯一标示来存取对象的,比如说可以按照对象的 hashCode来存取。 2、对于hibernate来说,可以利用JCS来缓存查询结果转载 2017-07-20 18:20:49 · 635 阅读 · 0 评论