hibernate 持久层有三种状态
transient 当一个对象new 出来后 还不有被保存时的状态,以数据库里没有与之对应的记录 可以随时被回收
presistent 这一种状态是被session管理的状态,在数据据库中有与之对应的记录 在commit之前可以随便
改里面的记录,在commit里会自动有一个账数据的检查,不同会自动更新,里面的所有变化在commit前
是同步的,
detache 在这个阶段,是save后的段,数据库有了实在的记录,不仅是有对应,已经存进去了,如果再update 就会
回到presistent 的状态
//生成一条数据
public void testInsert() {
Session session = null;
User user= null;
try{
session = HibernateUtils.getSession();
session.beginTransaction();
//transient
user = new User();
user.setName("吕成龙");
user.setPassword("123456");
//presistent
session.save(user);
//修改名字
user.setName("小龙");
//detache
session.getTransaction().commit();
user.setName("大龙");
}catch(Exception e) {
session.getTransaction().rollback();
e.printStackTrace();
}finally {
HibernateUtils.closeSession(session);
}
//update 后又回到了persistent 可以任意更改了,与commit同步
try{
session = HibernateUtils.getSession();
session.beginTransaction();
session.update(user);
session.getTransaction().commit();
}catch(Exception e) {
session.getTransaction().rollback();
e.printStackTrace();
}finally {
HibernateUtils.closeSession(session);
}
- 大小: 43.9 KB
分享到:
相关推荐
在Java的持久化框架Hibernate中,对象的状态管理是其核心特性之一...总之,理解Hibernate中对象的三种状态以及它们之间的转换对于开发人员来说至关重要。熟练掌握这些概念有助于编写出更加高效、可靠的Java持久化代码。
标题中的"hibernate保存不到数据1"是一个关于Hibernate框架在尝试保存数据到数据库时遇到问题的场景。描述提到了一个具体的解决方案,即通过在`hibernate.cfg.xml`配置文件中设置`connection.autocommit`属性为`true...
总结来说,理解和掌握实体对象的三种状态以及`saveOrUpdate`方法是优化Hibernate应用的基础。通过深入学习这些概念,开发者能够更有效地处理数据持久化,提高代码的稳定性和可维护性。在实践中,应根据具体需求选择...
1. **实体(Entity)**:在Hibernate中,实体通常对应于数据库中的表,一个Java类就是一个实体,它的实例是数据库中的一条记录。 2. **注解(Annotations)**:在Java 5之后,Hibernate开始使用注解来定义实体类和...
当调用此方法时,Hibernate会生成一条SQL INSERT语句来将该对象的数据插入到数据库中。如果该对象已经处于持久化状态,则调用`save`方法将会抛出异常。 - **update** 方法用于更新一个脱管状态的对象。当调用此...
例如,如果一个对象在事务内被多次修改,Hibernate只会生成一条包含所有修改的UPDATE语句,而不是每次修改都执行SQL。 二级缓存则是在SessionFactory级别,跨越不同事务和线程共享的。它保存的对象对整个应用都是...
- **delete()**:从数据库中删除一条记录,并将对象变为删除状态。Session会在清理缓存时执行DELETE语句。 #### 九、事务管理 为了确保数据的一致性和完整性,Hibernate提供了对事务的支持。通常情况下,事务的...
接下来,Hibernate会构造一条`INSERT`语句并将实体对象的数据插入到数据库中。需要注意的是,虽然调用了`session.save()`方法,但实际的`INSERT`操作并不是立即执行的,而是在清理Session缓存时进行的,通常是事务...
观察Hibernate生成的SQL语句可以看到`FOR UPDATE`子句的使用,这就是悲观锁的具体实现方式之一。 **Hibernate的锁模式**: - `LockMode.NONE`:不使用任何锁机制。 - `LockMode.WRITE`:Hibernate在插入或更新记录...
每个实体类的实例对应数据库中的一条记录。 4. **持久化类与表映射**:使用`@Table`注解来指定实体类所对应的数据库表名,`@Column`注解用于指定字段与表列的映射。 5. **主键**:`@Id`注解定义实体类中的主键字段...
Hibernate支持通过一次数据库操作插入多条记录。 ##### 4.2 批量更新 批量更新同样可以提高更新操作的效率。 ##### 4.3 StatelessSession StatelessSession用于执行简单的读写操作,不会维护持久性上下文。 ###...
- 如果在事务中对同一个对象的同一属性进行了多次修改,提交时Hibernate只会生成一条UPDATE语句。所以,上述程序提交时只需提交1条UPDATE语句,答案是B) 1。 8. SessionFactory的理解: - A) 错误:...
- **保存(Save)**: 使用`Session.save()`方法将临时对象转变为持久化对象,生成一个新的数据库记录。 - **更新(Update)**: 如果对象已经是持久化状态,修改对象后调用`Session.update()`会更新数据库中的记录。 ...
Hibernate将对象分为瞬时态、持久态、脱管态三种状态。瞬时态对象未被Hibernate管理,持久态对象与数据库中的一条记录相对应,而脱管态对象曾是持久态但已失去Session的管理。对象的生命周期包括了初始化、持久化、...
在CSDN博客中,作者分享了一个关于Hibernate API的学习教程,详细介绍了如何在实际项目中使用Hibernate进行数据操作。这个教程涵盖了以下几个关键知识点: 1. **Hibernate配置**:首先,你需要设置Hibernate的配置...
Hibernate定义了对象的三种状态:瞬时态、持久态和脱管态。瞬时态对象未被Session管理,持久态对象已与Session关联,脱管态对象曾是持久态但已从Session中清除。 六、持久化操作 1. 插入:Session的save()或...
4. 使用批处理操作,批量处理多条数据。 九、实战案例 通过具体的项目案例,如用户管理系统、订单系统等,实践Hibernate的使用,包括实体类设计、映射配置、数据操作及事务管理等。 总结,达内的Hibernate PDF教程...
2. Persistent:对象已持久化,与数据库中一条记录关联。 3. Detached:对象曾是持久化的,但当前不再与Session关联。 六、缓存机制 Hibernate支持一级缓存(Session级别的缓存)和二级缓存(SessionFactory级别的...