hiberante学习笔记

1 在maven中配置hibernate时候,只要是版本4.2.4或以上,就只配一个就行,不用再配什么slf4j之类的

2 @manytoone 和 @onetomany的情况:

一般是在manytoone这方,设置cascade={CascadeType.ALL} 这意味着,多的这方,在保存的时候,也会把一的这方保存。(但是要明确将一设置进多里)

而在一的这方,onetomany,即便是设置了 cascade={CascadeType.ALL} ,在保存一这方时候,仍然不能保存多。(已经将多明确设置进了一里面)

3 cascade 管 CUD 即 增删改 。而fetch 管 R ,即读,也就是load 和 get 。cascade这货没有默认值,必须显式的设。

4 关于fetch

在多的这一方,FetchType默认是EAGER的(这意味着,在get取多的时候,要同时发语句取一),而在一这方,FetchType默认是LAZY的。

默认情况下  --- 测试不通过!

User u = (User)session.get(User.class,1);

session.getTransaction().commit(); --- 事务已经提交,session已经没有了(应该是用getCurrentSession的情况),但是user 和 group都已经取出放到内存里了。

u.setName("new value"); -- 内存里是有u的

u.getGroup().setName("new GROUP"); --内存里是有GROUP的

session2.update(u); --- 以新session操作 内存里的值。

session2.getTransaction().commit(); 


如果说,第一句是 

User u = (User)session.load(User.class,1); 这仅仅是放到代理对象里,还没有发sql语句的。此时,如果

session.getTransaction().commit(); -

u.setName("new value"); -- 是不行的。


5 关于cascade再深入:CascadeType 里面的merge persist等 只有在调用 session.merge()和persist 方法时候才有效的。要注意。


6 关于删除。假设user 和 group双方互相设置了CascadeType.ALL ,如果user表

name   group_id

u1         1

u2         1

当你删除u1的时候,会把u2也删除。原因是:删除u1,user cascade着group,也会删除g1。而group又cascade着user,所以反过来又把u2也删除了。。

解决的办法是打破这种关联关系:

u1.setGroup(null);

session.delete(u1);即可

或者用sql语句

session.createQuery("delete from User u where u.id =1 ").executeUpdate();

------------重要,如果一这方设置了cascadetype.all,则删除一这方的时候,会一溜的把多这方全部删除。要想避免这种情况,处理办法有二,同上。但这样的话,实际上多的这样就是垃圾值了。


Hibernate 是一种流行的 ORM(对象关系映射)框架,它可以帮助开发者将 Java 对象映射到关系型数据库中。下面是使用 Hibernate 的基本步骤: 1. 引入 Hibernate 的依赖包(jar 文件)和数据库驱动程序。 2. 配置 Hibernate 的配置文件(hibernate.cfg.xml)和映射文件(*.hbm.xml)。 - 配置文件中包括数据库连接信息、Hibernate 的配置参数以及其他信息。 - 映射文件中定义了 Java 对象和数据库表之间的映射关系。 3. 在 Java 代码中创建 SessionFactory 对象,并使用该对象创建 Session 对象。 - SessionFactory 是线程安全的,应该在应用程序启动时创建。 - Session 是轻量级的,应该在每个事务或操作中创建。 4. 使用 Session 对象来执行 CRUD(增删改查)操作。 - 使用 save() 方法来插入新数据,使用 delete() 方法来删除数据,使用 update() 方法来修改数据,使用 get() 或 load() 方法来查询数据。 5. 在程序结束时关闭 Session 对象和 SessionFactory 对象。 下面是一个使用 Hibernate 进行 CRUD 操作的示例代码: ``` // 创建 Configuration 对象,并读取 hibernate.cfg.xml 配置文件 Configuration configuration = new Configuration().configure(); // 创建 SessionFactory 对象 SessionFactory sessionFactory = configuration.buildSessionFactory(); // 创建 Session 对象 Session session = sessionFactory.openSession(); // 插入新数据 Dog dog = new Dog("Tom", 2); session.save(dog); // 查询数据 Dog dog1 = (Dog) session.get(Dog.class, 1); // 修改数据 dog1.setAge(3); session.update(dog1); // 删除数据 session.delete(dog1); // 关闭 Session 对象和 SessionFactory 对象 session.close(); sessionFactory.close(); ``` 这是一个简单的 Hibernate 示例,你可以根据自己的需要添加更多的数据操作和业务逻辑。同时,你也需要熟悉 Hibernate 的各种配置参数和 API,以更好地使用 Hibernate 进行开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值