在下面的代码中,我对注入的EnitityManager感到麻烦,它 始终显示为null ;
public class GenericController extends AbstractController {
@PersistenceContext(unitName = "GenericPU")
private EntityManager em;
protected ModelAndView handleRequestInternal(
HttpServletRequest request,
HttpServletResponse response) throws Exception {
//(em == null) is always trigged
if (em == null) throw new NullPointerException("em is null");
Collection<Generic> Generics = em.createNamedQuery("Generic.findAll").getResultList();
ModelAndView mav = new ModelAndView("Generic");
mav.addObject(Generics);
return mav;
}
}
这是在 dispatcher-servlet.xml中 定义的bean定义。
<bean id="Generic" class="com.application.web.GenericController" />
应基于 persistence-context.xml 文件中定义的基于tx:annotation的方式注入EnitityManager 。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
<property name="url" value="removed" />
<property name="username" value="removed" />
<property name="password" value="removed" />
</bean>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="GenericPU" />
<property name="dataSource" ref="dataSource" />
<property name="jpaDialect">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
</property>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="false" />
<property name="databasePlatform" value="org.hibernate.dialect.SQLServerDialect" />
</bean>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
</beans>
持久性上下文是从 applicationContext.xml 加载的 __
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<import resource="classpath:META-INF/persistence-context.xml"/>
</beans>
完成类路径导入是因为ORM实体作为JAR文件包含在项目中。请注意,我相信持久性上下文已在加载,因为如果Spring无法解析其配置文件,它将不允许部署该应用程序。
这是我的 persistence.xml 。
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="CoolOrmJpaPU" transaction-type="RESOURCE_LOCAL">
<class>com.application.orm.jpa.Generic</class>
<!-- bunch more classes -->
</persistence-unit>
</persistence>
还有我的 web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>redirect.jsp</welcome-file>
</welcome-file-list>
</web-app>
有谁可以帮我离开这里吗?
今天,我很幸运能够与顾问讨论这个问题,他能够帮助我解决整个问题。
所以我的问题是Spring MVC正在建立 两个不同的上下文
,一个是在applicationContext.xml中定义的应用程序上下文,另一个是在dispatcher-servlet.xml中定义的Web上下文。
来自一个上下文的Bean无法与另一个上下文中的Bean对话,因此,当我在applicationContext.xml中初始化我的持久性上下文时,我无法在由dispatcher-
servlet.xml加载的bean(即我的控制器)中访问它。
当Netbeans自动生成我的Spring
MVC的基础时,默认情况下会进行设置。在某些大型Web应用程序中,有必要在与其余逻辑(持久性,业务代码等)不同的上下文中分离应用程序的Web部分。就我而言,当我尝试将实体管理器直接自动注入控制器中时,这对我不利。
为了解决这个问题,我改变了思路
<import resource="classpath:META-INF/persistence-context.xml"/>
从applicationContext.xml到我的dispatcher-
servlet.xml。然后,我的控制器从@PersistanceContext批注中正确地注入了EntityManagers。
我试图在SpringMVC中运行SpringBoot应用程序,在SpringMVCPOM中添加SpringBoot应用程序依赖项,并扫描SpringBoot包,但我面临以下问题
问题内容: 嗨,我正在尝试使用gcm,但无法使其正常工作。不知道我在哪里弄乱,下面是我得到的错误。我试图将我的应用程序直接部署在设备上并从那里进行调试,但是每当我尝试部署它时,都会出现此错误 AndroidManifest.xml 我的设备是HTC OneX Android版本:4.03 HTC Sense版本:4.0 软件编号:1.29.110.11 HTC SDK API等级:4.12 HTC
我已经尝试了所有的方法(如您在下面的代码中所见)。 第一: 我甚至安装了chrome扩展,但它也不工作。 你能告诉我我做错了什么吗?
当在模拟器、仿真器或物理电视设备上运行打包为. wgt文件的Tizen TV web-app时,它会发出包含“Origin: file://”标头的POST请求,这些请求会被服务器拒绝。GET请求不包含origin头,并按预期工作。 该项目配置为 tv-samsung-5.0,并包含以下相关配置行: <代码> 该应用程序使用axios网络库使用react原生网络构建。 如何避免应用发送此源标头?
本文向大家介绍StackExchange.Redis 在整个应用程序中复用复用器,包括了StackExchange.Redis 在整个应用程序中复用复用器的使用技巧和注意事项,需要的朋友参考一下 示例
Google建议我在Android应用程序中有一个不安全的X509TrustManager接口实现,需要更改代码如下: 若要正确处理SSL证书验证,请更改自定义X509TrustManager接口的checkServerTrusted方法中的代码,以便在服务器提供的证书不符合预期时引发CertificateException或IllegalArgumentException。对于技术问题,您可以p
出于某种原因,我的应用程序突然无法再构建了。首先我有颤振devtools问题,然后我升级到颤振2.8。1现在我的应用程序无法生成。我试着把Gradle升级到7.3。3和JDK 17,但我的应用程序无法构建,我搜索了整个GitHub和StackOverflow,但找不到解决方案。 这是我的第一个错误: 我通过添加以下内容来修正: 去gradle.properties. 但是现在当我试图构建时,我得到
问题内容: 如果使用ruby,在使用JDK之后,必须在Windows7的环境变量中更改“ PATH”。即使我使用多个应用程序,也不必更改它是否可以解决? 问题答案: 用系统的路径分隔符分隔Ruby和Java的路径。 如果是Windows 7, 您将可以同时使用 这是具有许多应用程序的Path变量的示例。