- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Spring MVC Controller 中使用 JPA 延迟加载(但它可能是一个随意的 servlet)。我发现一个 Book 实体与 Author 具有 @ManyToOne 惰性关系。
@Entity
public class Book extends BaseEntity {
private String isbn;
private String title;
@ManyToOne(fetch= FetchType.LAZY)
private Author author;
private int price;
SpringMVC Controller 对其进行查找(为了示例,我简化了代码):
@Controller
public class EditBookController {
@Autowired BookDao bDao;
@RequestMapping(value={"/updatebook"})
public String updateBook(@RequestParam("id")Long id) {
Book book = bDao.find(id);
System.out.println( book.getAuthor().getFirstName() ); // Lazy loading FAIL
return “bookView”;
}
BookDao.find() 在其祖先 BaseRepository 中定义:
@Transactional
@SuppressWarnings("unchecked")
public class BaseRepository<E extends BaseEntity> {
Class entityClass;
public E find(Long id){
return ( E ) em.find( entityClass, id );
}
当然,它会在 Controller 中触发 LazyInit 异常。因此,我添加了过滤器 OpenEntityManagerInViewFilter 并且它工作正常:书籍实体不再在 Controller 中分离。
现在,我想在 Controller 中修改这本书。例如,我调用 book.setPrice(4);
@RequestMapping(value={"/updatebook"})
public String updateBook(@RequestParam("id")Long id) {
Book book = bDao.find(id);
System.out.println( book.getAuthor().getFirstName() ); // Lazy loading OK
book.setPrice(4);
return “bookView”;
}
我希望 Hibernate 进行脏检查,检测到该书的值已更改,然后保存它。当关闭 EntityMangager 时,它会由 OpenEntityInViewFilter 触发。
但是我的(非分离的)托管实体不会触发对数据库的更新,除非我明确调用 em.merge(book)。
有人可以向我解释一下为什么在这种情况下脏检查没有激活吗?非常感谢!
Spring v3.1.2Hibernate v4.1.4
最佳答案
您使用什么来管理交易?
如果 spring 正在管理它们,那么您需要在 Controller 方法中添加@Transactional。 @Transactional 注释用于划分事务开始的位置,因此您遇到的问题是 spring/hibernate 不知道 updateBook()
返回时需要保留任何更改。 OpenEntityManagerInViewFilter 不提交事务(但您可能想编写自己的实现来进行提交)。
在我看来(其他人可能不同意),用 @Transactional 注释应用程序的入口点是一个很好的做法,它们可能是 Controller 、JMS 消费者或其他任何东西。
关于java - 为什么 OpenEntityManagerInViewFilter 不执行脏检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11797948/
我已经在这个网站和其他网站上搜索过让 OpenEntityManagerInViewFilter 工作的答案。我有一个标准的 User 对象,它引用具有多对多关系的角色对象作为一个集合。当我尝试从 C
为了克服 LazyInitializationException,我决定使用 OpenEntityManagerInViewFilter - 这是我的 AppInitializer 类中实现 WebA
我在 Spring MVC Controller 中使用 JPA 延迟加载(但它可能是一个随意的 servlet)。我发现一个 Book 实体与 Author 具有 @ManyToOne 惰性关系。
我的应用程序遇到了 LazyInitializationException 问题。通过做一些研究,我发现一个“简单”的解决方案应该是使用 OpenEntityManagerInViewFilter 功
我有一些已经在运行的 JBoss webapp,还有一个延迟初始化问题。因此,我被建议在 Spring 中进行调查并使用 OpenEntityManagerInViewFilter。 不过我还是报错,
我想使用OpenEntityManagerInViewFilter来避免延迟初始化加载。这是我的 web.xml 配置: contextConfigLocation
几天前我发布了一个问题,提到了 Spring 的 OpenEntityManagerInViewFilter: ui:repeat inside a ui:repeat and LazyInitExc
虽然关于 Spring 的 OpenSession/EntityManagerInViewFilter 主题已经写了很多帖子,但我找不到任何提到它的缺陷的帖子。据我了解,假设一个典型的分层 Web 应
我有一个基于java的配置,我定义与数据库相关的bean如下: @Configuration @EnableJpaRepositories("z.y.x") @EnableTransactionMan
我正在尝试在 WAS 6.0 (JDK 1.4.2) 上部署一个 Spring 应用程序。前几天我遇到了很多(Unsupported major.minor version 49.0)错误。我替换了大
我的 OEIV 过滤器应用程序似乎没有应用到我的 Struts 操作中。我正在使用由 Hibernate 3 支持的 Spring 3、Spring Security 3、Struts2、Tiles2
我查看了 OpenEntityManagerInViewFilter 的代码,我注意到它会查找在我的 Spring 上下文中定义的一个entityManagerFactoryBeanName。我确实有
我正在尝试将打开 session View 行为添加到现有的纯 JPA 应用程序。在服务层使用 Spring 不是一个选择。我想将 View 包装在 Spring 的 OpenEntityManage
我使用 Spring roo 对现有的 MySql DB 进行了逆向工程,它创建了所有必要的文件,我做了 mvn clean install,它执行并没有测试错误,当我运行 mvn tomcat:ru
所以我有这两门课: 示例 @Entity @Table(name="sample") public class Sample implements Serializable { @Id @Genera
我是一名优秀的程序员,十分优秀!