java – Spring-boot:不能使用持久性

前端之家收集整理的这篇文章主要介绍了java – Spring-boot:不能使用持久性前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经进入了这个阶段,而且 – 虽然我正在学习很多 – 开始绝望.

我已经尝试了关于这个很好的问题的所有建议:

No Persistence provider for EntityManager named

我有一个使用无处不在的HibernateUtil类的工作,但被告知要移动到一个简单的JPA风格在这里:

Spring RESTful controller method improvement suggestions

不幸的是,我不能让bean注入在spring-boot中正常工作.这是我的尝试:

Spring JPA (Hibernate) No qualifying bean of type: javax.persistence.EntityManagerFactory

经过这么多工作后,我终于找到了一个零实体经理.我发现这一点,开始认为它不行:

Using JPA2 in Tomcat 6: @PersitenceContext doesn’t work,EntityManager is null

在我看来,像EntityManagerFactory绝对应该是一个bean,无论是spring-boot创建的任何环境,但是…无论如何.我会认为这至少会有效:

应用启动:

  1. @Configuration
  2. @ComponentScan
  3. @EnableAutoConfiguration
  4. public class Application {
  5.  
  6. public static void main(String[] args) {
  7. SpringApplication.run(Application.class,args);
  8. }
  9. }

控制器:

  1. @Controller
  2. public class GetController {
  3.  
  4. private static final String PERSISTENCE_UNIT_NAME = "cpJpaPu";
  5.  
  6. @RequestMapping(value = "/user",method = RequestMethod.GET)
  7. public @ResponseBody User getUser(@RequestParam(value="id",required=true) int id) {
  8. User user = null;
  9.  
  10. EntityManagerFactory emf = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
  11. EntityManager em = emf.createEntityManager();
  12. UserDAO userDao = new UserDAO();
  13. userDao.setEntityManager(em);
  14. user = userDao.load(id);
  15.  
  16. return user;
  17. }
  18. }

DAO:

  1. public class UserDAO {
  2.  
  3. public EntityManager entityManager;
  4.  
  5. public void setEntityManager(EntityManager entityManager) {
  6. this.entityManager = entityManager;
  7. }
  8.  
  9. public EntityManager getEntityManager() {
  10. return entityManager;
  11. }
  12.  
  13. public void insert(User user) {
  14. entityManager.persist(user);
  15. }
  16.  
  17. public User load(int id) {
  18. return entityManager.find(User.class,id);
  19. }
  20. }

/src/main/resources/persistence.xml:

  1. <persistence 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" version="1.0">
  2. <persistence-unit name="cpJpaPu" transaction-type="RESOURCE_LOCAL">
  3. <provider>org.hibernate.ejb.HibernatePersistence</provider>
  4. <class>com.mydomain.User</class>
  5. <properties>
  6. <property name="hibernate.dialect" value="org.hibernate.dialect.PostgresqlDialect"/>
  7. <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
  8. <property name="hibernate.show_sql" value="false"/>
  9. <property name="hibernate.connection.username" value="user"/>
  10. <property name="hibernate.connection.password" value=""/>
  11. <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/mydb"/>
  12. </properties>
  13. </persistence-unit>
  14. </persistence>

它不工作:

  1. javax.persistence.PersistenceException: No Persistence provider for EntityManager named cpJpaPu
  2. javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:61)
  3. javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
  4. com.mydomain.GetController.getUser(GetController.java:25)
  5. sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  6. sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
  7. sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
  8. java.lang.reflect.Method.invoke(Unknown Source)
  9. org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:214)
  10. org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
  11. org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
  12. org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:748)
  13. org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689)
  14. org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
  15. org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:947)
  16. org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:878)
  17. org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:946)
  18. org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:837)
  19. javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
  20. org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:822)
  21. javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
  22. org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
  23. org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)

添加信息—

POM:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5.  
  6. <groupId>com.mygroup</groupId>
  7. <artifactId>myartifact</artifactId>
  8. <version>0.1.0</version>
  9.  
  10. <parent>
  11. <groupId>org.springframework.boot</groupId>
  12. <artifactId>spring-boot-starter-parent</artifactId>
  13. <version>0.5.0.M6</version>
  14. </parent>
  15.  
  16. <dependencies>
  17. <!-- Spring framework -->
  18. <dependency>
  19. <groupId>org.springframework.boot</groupId>
  20. <artifactId>spring-boot-starter-web</artifactId>
  21. </dependency>
  22.  
  23. <!-- Hibernate -->
  24. <dependency>
  25. <groupId>org.hibernate</groupId>
  26. <artifactId>hibernate-core</artifactId>
  27. <version>4.3.0.Final</version>
  28. </dependency>
  29.  
  30. <dependency>
  31. <groupId>org.hibernate</groupId>
  32. <artifactId>hibernate-entitymanager</artifactId>
  33. <!-- Must override version or face stack traces -->
  34. <version>4.3.0.Final</version>
  35. </dependency>
  36.  
  37. <!-- Spring ORM,works with Hibernate -->
  38. <dependency>
  39. <groupId>org.springframework</groupId>
  40. <artifactId>spring-orm</artifactId>
  41. </dependency>
  42.  
  43. <!-- Spring implementation of Jackson for RESTful JSON -->
  44. <dependency>
  45. <groupId>com.fasterxml.jackson.core</groupId>
  46. <artifactId>jackson-databind</artifactId>
  47. </dependency>
  48.  
  49. <!-- JDBC -->
  50. <dependency>
  51. <groupId>postgresql</groupId>
  52. <artifactId>postgresql</artifactId>
  53. <version>9.1-901.jdbc4</version>
  54. </dependency>
  55.  
  56. <!-- Logging -->
  57. <dependency>
  58. <groupId>org.slf4j</groupId>
  59. <artifactId>slf4j-log4j12</artifactId>
  60. </dependency>
  61.  
  62. <!-- Prevent logging conflicts -->
  63. <dependency>
  64. <groupId>org.springframework.boot</groupId>
  65. <artifactId>spring-boot-starter-logging</artifactId>
  66. <scope>compile</scope>
  67. <exclusions>
  68. <exclusion>
  69. <groupId>ch.qos.logback</groupId>
  70. <artifactId>logback-classic</artifactId>
  71. </exclusion>
  72. </exclusions>
  73. </dependency>
  74. </dependencies>
  75.  
  76. <properties>
  77. <start-class>com.cloudfordev.controlpanel.Application</start-class>
  78. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  79. </properties>
  80.  
  81. <build>
  82. <plugins>
  83. <plugin>
  84. <groupId>org.springframework.boot</groupId>
  85. <artifactId>spring-boot-maven-plugin</artifactId>
  86. </plugin>
  87.  
  88. <plugin>
  89. <groupId>org.apache.maven.plugins</groupId>
  90. <artifactId>maven-compiler-plugin</artifactId>
  91. <configuration>
  92. <source>1.7</source>
  93. <target>1.7</target>
  94. </configuration>
  95. </plugin>
  96. </plugins>
  97. </build>
  98.  
  99. <repositories>
  100. <repository>
  101. <id>spring-snapshots</id>
  102. <url>http://repo.spring.io/libs-snapshot</url>
  103. <snapshots><enabled>true</enabled></snapshots>
  104. </repository>
  105. </repositories>
  106.  
  107. <pluginRepositories>
  108. <pluginRepository>
  109. <id>spring-snapshots</id>
  110. <url>http://repo.spring.io/libs-snapshot</url>
  111. <snapshots><enabled>true</enabled></snapshots>
  112. </pluginRepository>
  113. </pluginRepositories>
  114. </project>

解决方法

JPA有一些功能,只能在XML配置中工作不幸,但是我看不到你的内容.我不认为persistence.xml是默认加载的,所以可能是这个问题.那么为什么不用流程和使用Java和application.properties配置实体管理器? JPA sample from Spring Boot拥有开始使用所需的一切.它使用Spring数据JPA,而您的代码仅使用JPA API,但您可以通过删除示例中的Spring数据依赖关系轻松地将其删除到该级别.

最近的Spring Boot快照有一个功能,可以让您创建自己的LocalEntityManagerfactorybean,以便您可以添加自定义XML配置,但是最多可以在需要自定义EntityManager的情况下手动执行所有JPA配置.

注:您在控制器中没有真正使用依赖注入 – 为什么不注入UserDao?

猜你在找的Java相关文章