- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为了克服LazyInitializationException,我决定使用OpenEntityManagerInViewFilter,但不能使用批注样式。我尝试过两种设置方法:
首先来自WebApplicationInitializer的onStartup方法:
OpenEntityManagerInViewFilter entityManagerInViewFilter = new OpenEntityManagerInViewFilter();
entityManagerInViewFilter.setEntityManagerFactoryBeanName("entityManagerFactory");
entityManagerInViewFilter.setPersistenceUnitName("defaultPersistenceUnit");
FilterRegistration.Dynamic filter = sc.addFilter("openEntityManagerInViewFilter", entityManagerInViewFilter);
filter.addMappingForUrlPatterns(null, false, "/*");
@WebFilter(urlPatterns = {"/*"})
public class MainFilter extends OpenEntityManagerInViewFilter {
public MainFilter() {
setEntityManagerFactoryBeanName("entityManagerFactory");
setPersistenceUnitName("defaultPersistanceUnit");
}
}
最佳答案
因为启动过程可能还不清楚(可能导致错误的配置),所以我决定给出详细的答案,但是对于想要立即跳转到答案的用户来说,答案也是“太长;没有阅读”。
TL; DR
最简单的方法是以下两个选项之一:
选项1:OpenEntityManagerInViewInterceptor
它比OpenEntityManagerInViewFilter更接近Spring,因此当您还需要与其他bean一起配置它时,可能更易于配置。
将以下内容用于您的Web配置:
@Configuration
@EnableWebMvc
@EnableTransactionManagement
@ComponentScan(basePackages = "mypackages")
public class WebConfig implements WebMvcConfigurer {
@Autowired
private EntityManagerFactory emf;
@Override
public void addInterceptors(InterceptorRegistry registry) {
OpenEntityManagerInViewInterceptor interceptor = new OpenEntityManagerInViewInterceptor();
interceptor.setEntityManagerFactory(emf);
registry.addWebRequestInterceptor(interceptor);
}
}
public class MyServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[]{MainConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[]{WebConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
public class MyServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[]{MainConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[]{WebConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
@Override
protected Filter[] getServletFilters() {
return new Filter[]{new OpenEntityManagerInViewFilter()};
}
}
@WebFilter(urlPatterns = {"/*"})
public class MainFilter extends OpenEntityManagerInViewFilter
@WebFilter(urlPatterns = {"/*"})
public class MainFilter extends OpenEntityManagerInViewFilter
OpenEntityManagerInViewFilter filter = new OpenEntityManagerInViewFilter();
FilterRegistration.Dynamic registration = registerServletFilter(servletContext, filter);
registration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST, DispatcherType.FORWARD, DispatcherType.INCLUDE), true, "/*");
public class MyServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[]{MainConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[]{WebConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
@Override
protected Filter[] getServletFilters() {
return new Filter[]{new OpenEntityManagerInViewFilter()};
}
}
@EnableJpaRepositories
@Configuration
@EnableTransactionManagement
public class MainConfig {
private Properties hibernateProperties() {
Properties props = new Properties();
props.setProperty("hibernate.hbm2ddl.auto", "update");
props.setProperty("hibernate.dialect", "org.hibernate.dialect.MariaDB10Dialect");
return props;
}
@Bean
public DataSource dataSource() {
Properties properties = new Properties();
properties.put("url", "jdbc:mariadb://localhost:3306/myDatabase");
properties.put("user", "root");
properties.put("password", "myPassword");
HikariConfig config = new HikariConfig();
config.setDataSourceClassName("org.mariadb.jdbc.MariaDbDataSource");
config.setMaximumPoolSize(10);
config.setDataSourceProperties(properties);
return new HikariDataSource(config);
}
@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory emf) {
JpaTransactionManager jpaTxManager = new JpaTransactionManager();
jpaTxManager.setEntityManagerFactory(emf);
return jpaTxManager;
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean emf = new LocalContainerEntityManagerFactoryBean();
emf.setDataSource(dataSource());
HibernateJpaDialect jpaDialect = new HibernateJpaDialect();
emf.setJpaDialect(jpaDialect);
emf.setJpaProperties(hibernateProperties());
emf.setPackagesToScan("mypackage");
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setGenerateDdl(true);
emf.setJpaVendorAdapter(vendorAdapter);
return emf;
}
}
@Configuration
@EnableWebMvc
@EnableTransactionManagement
@ComponentScan(basePackages = "mypackages")
public class WebConfig {}
@EnableTransactionManagement
,并且用
@org.springframework.transaction.annotation.Transactional
注释了控制器方法
@Configuration
@EnableWebMvc
@EnableTransactionManagement
@ComponentScan(basePackages = "mypackages")
public class WebConfig implements WebMvcConfigurer {
@Autowired
private EntityManagerFactory emf;
@Override
public void addInterceptors(InterceptorRegistry registry) {
OpenEntityManagerInViewInterceptor interceptor = new OpenEntityManagerInViewInterceptor();
interceptor.setEntityManagerFactory(emf);
registry.addWebRequestInterceptor(interceptor);
}
}
21:48:46.872 [http-nio-8080-exec-5] DEBUG o.s.o.j.s.OpenEntityManagerInViewInterceptor - Opening JPA EntityManager in OpenEntityManagerInViewInterceptor
21:48:46.878 [http-nio-8080-exec-5] DEBUG o.s.o.jpa.EntityManagerFactoryUtils - Closing JPA EntityManager
21:48:46.876 [http-nio-8080-exec-5] DEBUG o.s.orm.jpa.JpaTransactionManager - Found thread-bound EntityManager [SessionImpl(1847515591<open>)] for JPA transaction
关于java - OpenEntityManagerInViewFilter批注配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33056952/
我已经在这个网站和其他网站上搜索过让 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
我是一名优秀的程序员,十分优秀!