So, actually you can configure JPA in Spring without persistence. xml by writing a custom PersistenceUnitManager , though such a manager is not available out of the box.
The persistence. xml file is a standard configuration file in JPA. It has to be included in the META-INF directory inside the JAR file that contains the entity beans. The persistence.
If you package the persistence unit as a set of classes in a WAR file, persistence. xml should be located in the WAR file's WEB-INF/classes/META-INF directory.
The persistence. xml configuration file is used to configure a given JPA Persistence Unit. The Persistence Unit defines all the metadata required to bootstrap an EntityManagerFactory , like entity mappings, data source, and transaction settings, as well as JPA provider configuration properties.
I'm trying to set up a Spring JPA Hibernate simple example WAR for deployment to Glassfish. I see some examples use a persistence.xml file, and other examples do not. Some examples use a dataSource, and some do not. So far my understanding is that a dataSource is not needed if I have:
<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>   I can deploy fine, but my EntityManager is not getting injected by Spring.
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>   My class with the 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"; }   My web.xml:
  <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>     Are there any pieces I am missing to have Spring inject "em" in to StudentService?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With