- 浏览: 263689 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (87)
- Java (6)
- Frameworks (1)
- JavaWeb (3)
- Spring (6)
- Hibernate (26)
- Maven (2)
- Plugin (1)
- Velocity (1)
- Freemarker (1)
- Spring security (18)
- Google (5)
- Guice (5)
- rmi (1)
- Annotation (1)
- Binding (1)
- commons-fileupload (3)
- fileupload (3)
- ehcache (1)
- ApplicationContext (1)
- Resource (1)
- Validator (1)
- PropertyEditor (1)
- one-to-many (5)
- cascade (2)
- MessageSource (1)
- Serialize (1)
- Serializable (1)
- delete (1)
- delete-orphan (1)
- fetch (1)
- one-to-one (1)
- join (4)
- DomainObject (1)
- CRUD (1)
- composite-element (1)
- Hibernate ORM (14)
- dynamic-insert (1)
- dynamic-update (1)
- Search (1)
- DDD (0)
- Job (0)
- element (1)
- Unique (1)
- Group (1)
- tomcat (1)
- https (1)
- mysql (1)
最新评论
-
xurunchengof:
[url][url][url][img][img][img][ ...
Spring Security 3多用户登录实现之三 验证过滤器 -
Wind_ZhongGang:
yo8237233 写道你这样的话如果上传文件超过了50000 ...
Spring集成Commons fileupload,文件上传 -
yo8237233:
你这样的话如果上传文件超过了50000000就会报异常
Spring集成Commons fileupload,文件上传 -
zhuzhiguosnail:
Wind_ZhongGang 写道lianglaiyang 写 ...
Spring Security 3多用户登录实现一 -
曾老师:
?????
Spring Security 3用户登录实现之十 用户切换
先来看看hibernate-reference.pdf上对persist和save的说明吧
从上面得知persist和save方法都可以对持久化实体进行保存,但它们的作用范围却是有着明显的区别,当你调用persist方法对持久化实体进行保存时,它必须在事务的包裹下,如果脱离事务,那么是不会向数据库发送插入语句的,也就是说当你调用persist方法时,必须首先开启事务,而对于save方法来说不论在事务内外,它都会向数据库发送插入语句,不需要事务的包裹执行。
这里有这样两个持久化实体,person和book,两者有一对多的双向关联关系,来看看我写的一个测试类吧
package com.aaxis; import com.aaxis.model.Book; import com.aaxis.model.Person; import junit.framework.TestCase; import org.hibernate.*; import org.hibernate.cfg.Configuration; import java.util.ArrayList; import java.util.List; /** * Created by IntelliJ IDEA. * User: Zhong Gang * Date: 10/24/11 * Time: 11:50 AM */ public class HibernateCoreTest extends TestCase { public void testBook() throws Exception { Book book1 = new Book("book1", "booksssssss"); Book book2 = new Book("book2", "booksssssss"); List<Book> books = new ArrayList<Book>(); books.add(book1); books.add(book2); Person person = new Person("person1", "personsssss", books); SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); session.save(person); System.out.println("person's id is " + person.id());Person personAfterFound = (Person) session.get(Person.class, person.id()); System.out.println("person's name is " + personAfterFound.name()); transaction.commit(); session.close(); } }
这里首先使用的是save方法,打印出来了person的id,如果将这里的save方法换成persist,同样的结果,也打印出来了person的id,并且当我们再在这个session里根据person的id去查找person时,并没有发出任何查询语句,所以从这里得知,当我们调用persist或save方法时,会将一个持久化实体状态由瞬时态转化为持久态,并且将该对象缓存在session当中。但是如果将这里的保存方法换成merge,那么这时输出的id就是空的,也就查找不到任何person对象了,研究源码发现merge方法还返回了一个Object,查看该方法的注释@return an updated persistent instance,返回了一个持久化对象,这个对象就是当我们保存时向该方法传递进去的对象,所以说当在调用merge方法,如果想使用该对象的持久化对象,需要使用的是merge返回的对象。
发表评论
-
Hibernate unique使用
2011-11-28 22:16 1154在Hibernate中对于一对一的关联关系配置 ... -
Hibernate cascade在不同关联关系中的具体表现
2011-11-22 21:47 3131在Hibernate中,针对持久化实体的配置文件中有 ... -
Hibernate element使用
2011-11-20 20:43 1576一.Person package co ... -
Hibernate 单表实现树结构
2011-11-13 21:10 2831来看看通过单表来实现一个树形结构的方式。这里假设有这样 ... -
Hibernate Search配置及简单应用
2011-10-25 16:06 2576Hibernate Search是一款集成Apach ... -
Hibernate的三种配置方式
2011-10-24 16:58 1802对于Hibernate的配置方式,有三种,一种是通过 ... -
dynamic-insert,dynamic-update 我有话要说
2011-10-21 17:39 12982在之前的一个项目中,Team leader说在每一个 ... -
Hibernate one-to-many composite-element实现
2011-10-17 16:55 2641Hibernate中持久化实体间一对多关联关系的compo ... -
基于DomainObject的通用数据库CRUD操作
2011-10-17 15:09 1598对于项目中的持久化实体,持久化实体虽然对应着不同的业务对象 ... -
Hibernate one-to-many 双方双向连接表关联
2011-10-17 14:24 1729Hibernate中持久化实体间一对多关联,具体关联关 ... -
Hibernate one-to-many 多方单向连接表关联
2011-10-15 23:37 1287Hibernate中持久化实体间一对多 ... -
Hibernate one-to-many 一方单向连接表关联
2011-10-15 23:17 1692Hibernate中对于持久化实体间的关联关系有 ... -
Hibernate one-to-one 两方双向连接表关联
2011-10-15 17:38 2746Hibernate中对于持久化实体间的关联关系有三种分类, ... -
Hibernate fetch 抓取策略
2011-09-27 18:20 1356Hibernate fetch抓取策略定义了当抓 ... -
Hibernate 关联关系解除
2011-09-27 13:46 1539Hibernate对于持久化实体间的关联关系解 ... -
Hibernate one-to-many cascade探究
2011-09-08 13:20 1152对于Hibernate的one-to-many关联关系中, ... -
Hibernate inverse 深度解析
2011-08-09 22:55 1266inverse 英文意思为反向,倒转的。 Hi ... -
Hibernate ORM one-to-one主键关联关系映射
2011-08-01 22:08 1393Hibernate ORM one-to-one映射主要有 ... -
Hibernate ORM Inheritance
2011-07-31 22:56 1358Hibernate ORM提供了三 ... -
Hibernate many-to-many
2011-07-30 17:20 1889对于持久化实体间多对多的关联关系,在数据库中的反映 ...
相关推荐
在Java的持久化框架Hibernate中,管理对象与数据库之间的交互是通过一系列的方法完成的,其中包括`save()`, `saveOrUpdate()`, `persist()`, `merge()`, 和 `update()`。这些方法各有其特点和适用场景,理解它们的...
@org.hibernate.annotations.Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE}) private User user; ``` 在上面的例子中,我们设置了`inverse=true`,这意味着 `Address` 实体不再负责维护与 `User` ...
Hibernate提供了多种保存方式,包括save()、persist()、update()、saveOrUpdate()等,了解这些方法的区别非常重要,以便正确使用它们。本文将对Hibernate的各种保存方式进行详细的比较和分析。 一、预备知识 在...
5. CRUD操作:Hibernate提供了便捷的方法来完成创建(save()、persist())、读取(get()、load()、query())、更新(update()、merge())和删除(delete())对象的操作。其中,HQL(Hibernate Query Language)和...
- **创建(Create)**:使用 `Session` 的 `save()` 或 `persist()` 方法保存新实体到数据库。 - **读取(Read)**:通过 `get()` 或 `load()` 获取单个实体,`createQuery()` 或 `createSQLQuery()` 执行 HQL...
- **创建(Create)**:`Session.save()`或`Session.persist()`方法用于将对象保存到数据库,生成新的主键。 - **读取(Read)**:通过`Session.get()`、`Session.load()`或Criteria查询获取数据库中的对象。 - *...
entityManager.persist(user); } else { entityManager.merge(user); } } // ... } ``` 5. **使用Repository**:在业务逻辑层,你可以通过依赖注入的方式使用上述DAO,执行CRUD操作。 6. **事务管理**:对于...
4. **持久化(Persistence)**:Hibernate提供了几种方式来实现对象的持久化,如`Session`接口提供的`save()`, `persist()`, `update()`和`merge()`方法。 5. **查询语言(HQL)**:Hibernate有自己的查询语言,即...
6. **实体生命周期**:Hibernate定义了实体的四个状态:瞬时态、持久态、托管态和脱管态,并提供了相应的方法来管理这些状态,如save()、update()、merge()、persist()等。 7. **多对一、一对多、多对多关系映射**...
- **创建(Create):** 通过`Session.save()`或`Session.persist()`方法将Java对象保存到数据库。 - **读取(Read):** 可以通过`Session.get()`、`Session.load()`或HQL查询来获取数据。 - **更新(Update):...
通过Session的save(), persist(), merge()等方法,可以控制对象的状态转换。 8. **事务管理**:Hibernate提供了基于JTA(Java Transaction API)和JDBC的事务管理机制,确保数据库操作的原子性、一致性、隔离性和...
2. **持久态(Persistent)**:对象已经通过Session的save()或persist()方法与当前Session关联,并且数据库中有了对应的记录。当对象属性发生变化时,Hibernate会自动更新数据库中的记录。 3. **脱管态(Detached)...
通过Session的save()或persist()方法,对象可以从瞬时态变为持久态,实现持久化。update()和merge()方法则用于更新已存在的持久化对象。 六、事务处理 Hibernate支持JTA和JDBC事务管理。Transaction接口提供了begin...
1. **持久化操作**: 通过Session的save()、persist()、update()、merge()方法完成对象的持久化。 2. **查询操作**: 使用Session的get()、load()获取单个对象,使用createQuery()或createCriteria()执行HQL或Criteria...
例如,使用Session对象的save()或persist()方法可实现对象的持久化,而get()和load()用于查询,update()和merge()用于更新,delete()则用于删除。 4. **级联操作**: 在关联映射中,Hibernate允许级联操作,这意味着...
常见的`cascade`选项包括`SAVE_UPDATE`, `DELETE`, `MERGE`, `REFRESH`, `PERSIST`, 和 `ALL`。 #### Inverse 关联的拥有者 `inverse`属性用于指定哪一方负责维护关联关系。当设置`inverse=true`时,表示该实体...
例如,使用`save()`或`persist()`方法创建新对象,`load()`或`get()`方法读取对象,`update()`或`merge()`方法更新对象,以及`delete()`方法删除对象。 3. 查询语言(HQL):Hibernate查询语言,类似于SQL,但面向...
3. `save() / persist()`: 保存或持久化对象到数据库。 4. `update() / merge()`: 更新已存在的数据库记录。 5. `delete()`: 删除数据库中的记录。 6. `commit()`: 提交事务,将所有操作写入数据库。 7. `flush()`: ...
1. **创建(Create)**:使用 Session 的 `save()` 或 `persist()` 方法保存新对象到数据库。 2. **读取(Read)**:`get()` 或 `load()` 方法用于根据主键获取对象,`query()` 或 HQL(Hibernate 查询语言)用于...