Null EntityManager using @PersistenceContext

戏子无情 提交于 2019-12-11 07:34:34

问题


I'm trying to use a simple coding with Spring Boot, using the @PersistenceContext in the entitymanager, to create a object in MySQL, but I'm getting that my entitymanager object is null and not sure why, because the method that is using the entitymanager hast the @transaction annotation.

This is my code where I call the method to insert the data:

import org.hibernate.service.spi.ServiceException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

@Component
public class VehicleService implements IVehicleService {

    @Autowired
    IFileService fileService;

    @Transactional
    public void addVehicle(Vehicle vehicle) throws ServiceException{
        Vehicle vehicleNew = new Vehicle();
        vehicleNew.setName(vehicle.getName());
        vehicleNew.setType(vehicle.getType());
        vehicleNew.setEnrollment(vehicle.getEnrollment());
        try{
            fileService.createVehicle(vehicle);
        }catch(Exception e){

        }
    }   
}

import org.hibernate.service.spi.ServiceException;
import org.springframework.transaction.annotation.Transactional;

public interface IFileService {

    @Transactional
    void createVehicle(Vehicle vehicle) throws ServiceException;

}

Here is where I call the entitymanager and always is null:

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.springframework.stereotype.Component;

@Component
public class FileService implements IFileService{

    @PersistenceContext
    protected EntityManager entityManager;

     public void createVehicle(Vehicle vehicle) {
          System.out.println("Inserting........................");
          entityManager.persist(vehicle);
          System.out.println("Inserted!");
          return;
     }
}

hibernate.cfg.xml

<hibernate-configuration>
 <session-factory name="hibernateSessionFactory">
  <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
  <property name="hibernate.connection.password">global</property>
  <property name="hibernate.connection.url">jdbc:mysql://localhost/testDB</property>
  <property name="hibernate.connection.username">root</property>
  <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
  <property name="hibernate.show_sql">true</property>
  <property name="hibernate.format_sql">true</property>
<!--   <property name="hibernate.hbm2ddl.auto">create</property> -->
  <mapping class="com.org.testing.Vehicle"/>
 </session-factory>
</hibernate-configuration>

回答1:


I think in your case you should work with hibernate session factory and hibernate session instead of entity manager ,if you want to work with entity manager just go to your application.properties in your resource file and add this :

spring.datasource.url = jdbc:mysql://localhost:3306/testDB
# Username and password
spring.datasource.username = root
spring.datasource.password = global
# Show or not log for each sql query
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto = update
# Naming strategy
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
# Allows Hibernate to generate SQL optimized for a particular DBMS
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

don't forget to add spring jpa dependency in your pom.xml



来源:https://stackoverflow.com/questions/40461833/null-entitymanager-using-persistencecontext

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!