-
Hibernate OneToMany中批量插入的问题5
先描述下问题:在做Hibernate的OneToMany关联时,Hibernate不会进行批量插入,而是根据Set中的记录数做了N次插入。能否有办法做到批量插入?希望各位大侠给分析下,谢谢! 用到的代码如下:
一端的Bean如下:@Entity @Table(name = "a_temp_one") public class OneSide { @Column(name="id") @Id @GeneratedValue(generator="hibernate-uuid") @GenericGenerator(name = "hibernate-uuid", strategy = "uuid") private String id = null; @Column(name="name") private String name = null; @OneToMany(cascade={},fetch = FetchType.LAZY) @JoinTable(name = "a_temp_onetomany", joinColumns = { @JoinColumn(name = "ONEID") }, inverseJoinColumns = { @JoinColumn(name = "MANYID") }) private Set<ManySide> manySet = null; /** * Getter 和 Setter 方法省略 */ }
多端的Bean如下:@Entity @Table(name = "a_temp_many") public class ManySide { @Column(name="id") @Id @GeneratedValue(generator="hibernate-uuid") @GenericGenerator(name = "hibernate-uuid", strategy = "uuid") private String id = null; @Column(name="name") private String name = null; /** * Getter 和 Setter 方法省略 */ }
TestCase中的代码如下:public class Test extends TestCase{ protected Session session; protected Transaction tx; protected void setUp() throws Exception { Configuration cfg = new AnnotationConfiguration().configure(); session = cfg.buildSessionFactory().openSession(); tx = session.beginTransaction(); } protected void tearDown() throws Exception { tx.commit(); session.close(); } public void test() { OneSide one = (OneSide) session.load(OneSide.class,"4028b2923782ae44013782ae47480000"); String hql = "From ManySide"; // 查询所有的Many端对象 List<ManySide> list = session.createQuery(hql).list(); // 设置多端到一端并更新 one.setManySet(new HashSet<ManySide>(list)); session.update(one); } }
执行后Hibernate生成的代码如下:
Hibernate: select manyside0_.id as id1_, manyside0_.name as name1_ from a_temp_many manyside0_ Hibernate: select oneside0_.id as id0_0_, oneside0_.name as name0_0_ from a_temp_one oneside0_ where oneside0_.id=? Hibernate: delete from a_temp_onetomany where ONEID=? Hibernate: insert into a_temp_onetomany (ONEID, MANYID) values (?, ?) Hibernate: insert into a_temp_onetomany (ONEID, MANYID) values (?, ?) Hibernate: insert into a_temp_onetomany (ONEID, MANYID) values (?, ?) Hibernate: insert into a_temp_onetomany (ONEID, MANYID) values (?, ?)
可以看出Hibernate是给关联表做了多次插入去维护一方和多方的关系,这样的话,当数据量上来的时候,一定会影响效率。所以请问有没有办法能把上面的几个Sql做一个批量插入去维护关联表?2012年5月25日 16:28
目前还没有答案
相关推荐
为了提高性能,Hibernate提供了批量插入、更新和删除功能,以及延迟加载、批处理等优化策略。合理使用这些特性可以显著提升应用性能。 综上所述,Hibernate中文参考文档详尽地阐述了如何使用Hibernate进行数据持久...
在Hibernate中,我们通常使用`@OneToMany`注解来表示这种关系。例如,一个学生可以有多个课程,而一门课程可以被多个学生选修。为了实现这种关系,我们需要在父实体类中定义一个集合属性,如`List<Course>`,并使用...
10. **批量插入**:对于大量数据插入,可使用SQL的批处理或Hibernate的批处理功能,如Session的batch_size配置,提高性能。 在实际开发中,我们还需要注意一些优化技巧,比如懒加载(@OneToMany、@ManyToOne等关系...
- 使用批处理:通过设置hibernate.jdbc.batch_size来批量处理插入、更新和删除操作。 - 开启二级缓存:提高数据读取速度,但需注意缓存一致性问题。 - 使用懒加载(Lazy Loading):按需加载关联对象,减少内存...
Hibernate通过`<class>`标签(XML映射)或@Entity注解(注解映射)定义实体类,`<id>`表示主键,`<property>`或@Basic对应字段,`<many-to-one>`或@ManyToOne处理一对多关系,`<one-to-many>`或@OneToMany处理多对...
9. 批量操作:为了提高性能,Hibernate支持批量插入、更新和删除,以及批处理查询。 10. JPA集成:Hibernate也实现了Java Persistence API(JPA),提供了一种标准的方式来使用ORM服务。 通过"MLDN_Hibernate开发...
8. 批量操作:Hibernate支持批量插入、更新和删除,可以显著提高性能,例如`StatelessSession`用于执行此类操作。 9. JPA兼容性:Hibernate既是独立的ORM框架,也实现了Java Persistence API(JPA),因此具备跨...
8. 批量处理和性能优化:Hibernate提供了批量插入、更新和删除操作,以及批处理查询。此外,通过合理的配置和设计,如合理选择缓存策略、避免N+1查询问题、优化HQL语句,可以显著提升性能。 9. JPA与Hibernate:...
Hibernate支持一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多(ManyToMany)的关联映射,通过外键或者中间表实现关系。 八、性能优化 1. 批量操作:利用批处理提高插入、更新和删除的效率...
Hibernate是Java开发中的一个持久化框架,它通过提供一种对象-关系映射机制,将Java类与数据库表之间的关系进行映射,实现了在数据库操作中以面向对象的方式处理数据。它具有强大的查询语言HQL(Hibernate Query ...
在 Hibernate 中,如果我们需要批量处理大量数据,例如插入 1000 000 条记录,就会出现 OutOfMemoryException 异常。这是因为 Hibernate 的 Session 有一个一级缓存,会将所有对象存储在内存中。如果不及时清空缓存...
**标题:“Hibernate课程的总结”** 在学习Hibernate框架的过程中,我们深入探讨了它在Java企业级应用中的...通过阅读提供的“hibernate课堂笔录_0906.txt”,可以进一步巩固这些知识,并解决实际开发中遇到的问题。
7. **批量处理**:Hibernate提供了批处理功能,如批处理更新和删除,以及SQL插入语句的批量执行。通过设置批处理大小,可以提高数据库操作的效率。 8. **对象事件**:Hibernate允许监听对象的生命周期事件,如加载...
- 使用`batch-size`设置批量插入、更新的大小。 - `flushMode`控制何时与数据库同步数据。 - `hibernate.show_sql`开启SQL日志,便于调试。 ### 9. Criteria与Querydsl结合 Querydsl 是一个强大的查询构造工具,...
2. **批量操作**:使用批处理更新和插入,提高数据处理效率。 3. **懒加载与立即加载**:根据需求选择合适的加载策略,避免不必要的数据加载。 **五、注意事项** 1. **索引维护**:当元素在List中移动时,需要...
2. batch size:设置批量插入、更新或删除的大小,提升数据库操作效率。 九、事件监听和拦截器 1. 事件监听器:通过实现特定接口,对持久化操作进行预处理和后处理。 2. 拦截器:更灵活的扩展机制,可以在对象生命...
3. 批量操作与性能优化:学习如何进行批量插入、更新,以及如何通过配置和策略提升Hibernate的性能。 4. 组合实体与懒加载:讲解如何处理复杂对象结构,理解和使用懒加载以降低内存消耗。 通过这四次课程的学习,...
- 批量操作:使用批处理更新和插入,减少与数据库的交互次数。 - lazy loading:延迟加载,只在需要时加载关联对象,减少内存占用。 - 查询优化:合理使用HQL和Criteria,避免N+1查询问题,使用JOIN fetch提高性能。...
在这个教程中,我们将逐步介绍如何搭建 Hibernate 框架,并进行基本的数据库操作。 **一、Hibernate 概述** Hibernate 提供了一个强大的数据持久化层,允许开发者使用面向对象的方式来处理数据库事务,而无需直接...