在hibernate上
@oneToOne, @ManyToOne, @OneToMany 这些注解上可以设置
fetch = FetchType.LAZY
但是如果在这些注解上在加上
@NotFound(action = NotFoundAction.IGNORE)
则懒加载失效, 会变成立即加载. (在程序中会带来很可怕的效应). 产生n+1查询.
所以要使用fetch = FetchType.LAZY时, 要把 @NotFound给去掉
估计hibernate在看到 @NotFound时, 会先去数据库里看看是不是有这数据, 这样就产生了查询, 让懒加载失效了.
以上在hibernate 4.3.6版本上有这个问题. 不知道是不是hibernate自身的问题
具体可参见
http://stackoverflow.com/questions/15666042/hibernate-manytoone-n1-issue
http://stackoverflow.com/questions/222453/how-to-stop-hibernate-from-eagerly-fetching-many-to-one-associated-object
也有好些中文的:
http://www.cfanz.cn/?c=article&a=read&id=74847
http://duanfei.iteye.com/blog/2090469
http://blog.csdn.net/beyond667/article/details/8836805
ps:
用好hibernate真心不容易. 要是项目组里没有hibernate专家, 这东西还是不要用了. 前期好像可能省不少时间, 后期真是要命.
分享到:
相关推荐
在Java的持久化框架Hibernate中,`ManyToOne`关系是一种常见的关联映射方式,它表示一个实体类("一"端)拥有对另一个实体类("多"端)的多个实例的引用。在这个例子中,我们关注的是如何在Hibernate中配置和使用`...
8. `@OneToMany`: 表示一对多关系,可以配置fetch模式(LAZY或EAGER)和排序方式。 ```java @OneToMany(mappedBy = "user", fetch = FetchType.LAZY) private List<Order> orders; ``` 9. `@ManyToMany`: 表示多对...
Hibernate 中 fetch=FetchType.LAZY 懒加载失败处理方法是 Hibernate 框架中的一种常见问题。当我们在 Hibernate 中使用懒加载特性时,可能会遇到 LazyInitializationException 异常,这是因为 Hibernate 的 ...
在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者用面向对象的方式处理数据库操作。在Hibernate中,关联映射是连接数据库表之间关系的关键概念,使得对象模型能够准确反映数据库结构...
配置`@ManyToOne`时,同样需要指定`targetEntity`属性,此外还可以设置`fetch`属性来控制关联对象的加载策略,例如`FetchType.LAZY`表示延迟加载,`FetchType.EAGER`表示立即加载。`@JoinColumn`注解用于定义在子类...
1. 在实体类中,我们通常会使用`@OneToMany`, `@ManyToOne`, `@OneToOne` 或 `@ManyToMany` 注解来定义关联关系,然后通过 `fetch = FetchType.LAZY` 来指定关联关系的加载策略为懒加载。 2. 当执行查询并返回实体时...
在Java的持久化框架Hibernate中,懒加载(Lazy Loading)是一种重要的对象关系映射策略,用于提高应用程序的性能。懒加载的基本思想是延迟加载,即当真正需要数据时,才去数据库加载。在这个场景中,我们关注的是...
在`@OneToMany`和`@ManyToOne`注解中,通过设置`fetch`属性为`FetchType.LAZY`可实现: ```java @OneToMany(mappedBy = "parent", fetch = FetchType.LAZY) private List<Child> children; ``` **五、总结** 使用...
当`@ManyToOne`, `@OneToOne`, `@OneToMany`, 或 `@ManyToMany`注解中的`fetch`属性设置为`LAZY`时,关联的实体将不会在主实体加载时立即加载,而是在第一次访问这些关联属性时才加载。 - 这种策略避免了在不需要...
1. **延迟加载(Lazy Loading)**: 使用 `@OneToMany` 和 `@ManyToOne` 注解时,可以通过 `fetch = FetchType.LAZY` 实现关联对象的懒加载,降低初始化时的内存消耗。 2. **批处理(Batch Processing)**: 通过设置 ...
@ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "class_id") private Class class; // getters & setters } ``` **使用示例** 在Service或DAO层,我们可以方便地进行操作,如添加学生到班级,或通过...
12. **懒加载(Lazy Loading)与立即加载(Eager Loading)**:通过`@ManyToOne(fetch = FetchType.LAZY)`等设置,控制关联对象的加载时机,优化性能。 总的来说,Hibernate 3.6.10 Final是企业级Java应用中不可或...
在IT领域,尤其是在Java开发中,整合Hibernate 4.3.5与Spring(Spring MVC 4.0.4)是一项常见的任务,目的是充分利用两者的优势,实现数据持久化和业务逻辑控制的高效配合。本示例源码展示了如何通过注解方式来完成...
13. **懒加载(Lazy Loading)**:Hibernate支持懒加载机制,即关联的对象在需要时才从数据库加载,这通过`@OneToMany`, `@ManyToOne`, `@OneToOne`等注解的`fetch = FetchType.LAZY`实现。 14. **缓存(Caching)*...
4. @Basic(fetch = FetchType.LAZY):基础属性的懒加载。 总结,Hibernate 3.4.0.GA版本通过注解方式提供了强大的ORM功能,简化了数据库操作,提高了开发效率。理解和掌握这些注解的用法,能够帮助开发者更好地利用...
`@OneToMany(fetch = FetchType.LAZY)`实现懒加载。 10. **缓存机制** Hibernate提供了一级缓存(Session级别的内存缓存)和二级缓存(SessionFactory级别的分布式缓存),减少数据库访问,提高系统性能。 11. **...
在上面的代码中,我们使用了 HQL、Criteria 和 Hibernate Annotation 中的 lazy、batchSize 和 join fetch 等方法来优化查询,避免了 1+n 问题。 Hibernate 性能优化需要我们注意批量处理和 1+n 问题,并使用相应的...
当我们在实体类中使用`@OneToMany`、`@ManyToOne`或`@ManyToMany`注解,并设置`fetch = FetchType.LAZY`时,就会启用懒加载。然而,懒加载的执行依赖于一个有效的Hibernate Session。在Spring整合Hibernate的情况下...