Trong đoạn mã sau tôi gặp rắc rối với EnitityManager được tiêm của tôi, trong đó luôn hiển thị là null;Sửa Null EntityManger trong ứng dụng Spring MVC?
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;
}
}
Dưới đây là định nghĩa bean, quy định tại phối-servlet.xml.
<bean id="Generic" class="com.application.web.GenericController" />
EnitityManager nên được tiêm dựa trên tx: chú thích dựa trên định nghĩa trong bền bỉ-context.xml tập tin.
<?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>
Các kiên trì ngữ cảnh được nạp từ 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>
Các classpath nhập khẩu được thực hiện bởi vì các đối tượng ORM được bao gồm như là một tập tin JAR vào dự án. Lưu ý rằng tôi tin rằng bối cảnh persistence đang được nạp, vì Spring sẽ không cho phép ứng dụng được triển khai nếu nó không thể phân tích các tệp cấu hình của nó.
Đây là số persistence.xml của tôi.
<?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>
Và web.xml của tôi
<?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>
bất cứ ai có thể giúp tôi ra ở đây?
Bạn tham khảo persistence-context.xml từ application-context.xml như thế nào? Sử dụng nhập? – Mark
Đánh dấu, tôi đã thêm điều đó cho bạn. Xin lỗi tôi đã muốn loại trừ chi tiết, nhưng có rất nhiều cấu hình ở đây mà tôi không muốn bao gồm tất cả mọi thứ. –