Tôi đang cố thiết lập một ví dụ đơn giản về Spring JPA Hibernate WAR để triển khai cho Glassfish. Tôi thấy một số ví dụ sử dụng tệp persistence.xml và các ví dụ khác thì không. Một số ví dụ sử dụng dataSource, và một số thì không. Cho đến nay, hiểu biết của tôi là không cần có dataSource nếu tôi có:Spring JPA và persistence.xml
<persistence-unit name="educationPU"
transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.coe.jpa.StudentProfile</class>
<properties>
<property name="hibernate.connection.driver_class"
value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.url"
value="jdbc:mysql://localhost:3306/COE" />
<property name="hibernate.connection.username" value="root" />
<property name="show_sql" value="true" />
<property name="dialect" value="org.hibernate.dialect.MySQLDialect" />
</properties>
</persistence-unit>
Tôi có thể triển khai tốt, nhưng EntityManager của tôi không được Spring tiêm vào.
My applicationContext.xml:
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
<property name="persistenceUnitName" value="educationPU" />
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="StudentProfileDAO" class="com.coe.jpa.StudentProfileDAO">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="studentService" class="com.coe.services.StudentService">
</bean>
lớp của tôi với EntityManager:
public class StudentService {
private String saveMessage;
private String showModal;
private String modalHeader;
private StudentProfile studentProfile;
private String lastName;
private String firstName;
@PersistenceContext(unitName="educationPU")
private EntityManager em;
@Transactional
public String save()
{
System.out.println("*** em: " + this.em); //em is null
this.studentProfile= new StudentProfile();
this.saveMessage = "saved";
this.showModal = "true";
this.modalHeader= "Information Saved";
return "successs";
}
web.xml của tôi:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
Có bất kỳ mảnh tôi thiếu t o có Spring tiêm "em" vào StudentService không?
Huh? Thuộc tính 'name' tùy chọn của' @ PersistenceContext' được sử dụng để tìm kiếm trình quản lý thực thể được tiêm. ** Nó không có phần tử tương ứng trong 'persistence.xml' **. Nếu điều này làm việc cho bạn, đây là IMO chỉ là một tác dụng phụ may mắn liên quan đến sự vắng mặt của 'unitName' (hành vi trong trường hợp này là nhà cung cấp cụ thể). Nhưng điều này không đúng. –