![](/img/trans.png)
[英]Class org.gradle.tooling.internal.gradle.DefaultBuildIdentifier does not implement the requested interface
[英]Class SpringHibernateJpaPersistenceProvider does not implement the requested interface PersistenceProvider
我被難住了——我已經好幾年沒用過 Hibernate 了,而且從來沒有用過 Spring Boot。 Spring Boot,但從不使用 Hibernate 或 JPA。 所以我試圖弄清楚如何讓它為我的工作工作 - 我應該在星期一演示一些東西,如果我能讓“這個”工作,我會把它復制到我的工作筆記本電腦上並改變當然是細節。 順便說一句 - 這是我得到的信息 - 我不得不在標題中縮短它:
“類 org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider 未實現請求的接口 javax.persistence.spi.PersistenceProvider”
我有“主”類 - TestWebApplication:
package net.draconia.testWeb;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSource;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.orm.hibernate5.HibernateTransactionManager;
import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
@SpringBootApplication(scanBasePackages = {"com.draconia.testWeb.controller"})
public class TestWebApplication
{
@Bean
public DataSource getDatasource()
{
BasicDataSource objDatasource = new BasicDataSource();
objDatasource.setDriverClassName("com.mysql.jdbc.Driver");
objDatasource.setUrl("jdbc:mysql://localhost:3306/Test");
objDatasource.setUsername("root");
objDatasource.setPassword("R3g1n@ M1lL$ 1$ My Qu3eN!");
return(objDatasource);
}
@Bean
public LocalContainerEntityManagerFactoryBean getEntityManagerFactory()
{
LocalContainerEntityManagerFactoryBean objEntityManager = new LocalContainerEntityManagerFactoryBean();
objEntityManager.setDataSource(getDatasource());
objEntityManager.setPackagesToScan(new String[] { "net.draconia.testWeb.beans" });
JpaVendorAdapter objVendorAdapter = new HibernateJpaVendorAdapter();
objEntityManager.setJpaVendorAdapter(objVendorAdapter);
objEntityManager.setJpaProperties(getHibernateProperties());
return(objEntityManager);
}
protected Properties getHibernateProperties()
{
Properties objHibernateProperties = new Properties();
objHibernateProperties.setProperty("hibernate.hbm2ddl.auto", "create-drop");
objHibernateProperties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
return(objHibernateProperties);
}
@Bean
public JpaTransactionManager getHibernateTransactionManager()
{
JpaTransactionManager objTransactionManager = new JpaTransactionManager();
objTransactionManager.setEntityManagerFactory(getEntityManagerFactory().getObject());
return(objTransactionManager);
}
public static void main(String[] args)
{
SpringApplication.run(TestWebApplication.class, args);
}
}
,實體bean:
package net.draconia.testWeb.beans;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity(name = "Books")
public class Book
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer miId;
@Column(columnDefinition = "varchar(200) not null", insertable = true, length = 200, name = "BookName", nullable = false, table = "Books", unique = false, updatable = true)
private String msBookName;
@Column(columnDefinition = "varchar(100) not null", insertable = true, length = 100, name="Author", nullable = false, table = "Books", unique = false, updatable = true)
private String msAuthor;
public String getAuthor()
{
if(msAuthor == null)
msAuthor = "";
return(msAuthor);
}
public String getBookName()
{
if(msBookName == null)
msBookName = "";
return(msBookName);
}
public int getId()
{
if(miId == null)
miId = 0;
return(miId);
}
public void setAuthor(final String sAuthor)
{
if(sAuthor == null)
msAuthor = "";
else
msAuthor = sAuthor;
}
public void setBookName(final String sBookName)
{
if(sBookName == null)
msBookName = "";
else
msBookName = sBookName;
}
public void setId(final Integer iId)
{
if(iId == null)
miId = 0;
else
miId = iId;
}
}
,DAOConcrete 類(接口只是一種合乎邏輯的方法,但如果你願意,我也會發布它):
package net.draconia.testWeb.dao;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import net.draconia.testWeb.beans.Book;
@Repository("bookDAO")
public class BookDAOImpl implements BookDAO
{
@Autowired
private EntityManagerFactory mObjEntityManagerFactory;
public List<Book> getAllBooks()
{
EntityManager objEntityManager = getEntityManagerFactory().createEntityManager();
List<Book> lstBooks = objEntityManager.createQuery("from Books", Book.class).getResultList();
return(lstBooks);
}
protected EntityManagerFactory getEntityManagerFactory()
{
return(mObjEntityManagerFactory);
}
}
,以及 REST 端點/MVC 控制器的控制器類:
package net.draconia.testWeb.controllers;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import net.draconia.testWeb.beans.Book;
import net.draconia.testWeb.dao.BookDAO;
@Controller
public class TestController
{
@Autowired
private BookDAO mObjDAO;
@GetMapping("/Books")
public List<Book> getBooks()
{
return(getDAO().getAllBooks());
}
protected BookDAO getDAO()
{
return(mObjDAO);
}
}
POM 文件在這里只是為了完整性,但我認為這不一定是問題,除非我缺少依賴項:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>net.draconia</groupId>
<artifactId>testWeb</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>testWeb</name>
<description>Demo project for Spring Boot</description>
<properties>
<hibernate.version>6.1.0.Final</hibernate.version>
<java.version>11</java.version>
<mysql.version>8.0.29</mysql.version>
<spring.version>5.3.2</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.13.3</version>
</dependency>
<dependency>
<groupId>jakarta.persistence</groupId>
<artifactId>jakarta.persistence-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>javax.persistence-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
如果您注意到,我將包含對 Jackson 庫的依賴項,因為書籍列表應作為 JSON 對象返回。 我不認為這是一個問題,而只是說-我可能已經為此刪除了它,但是當它運行時,當/如果它起作用時,我將無法理解書籍清單。 我究竟做錯了什么???
將休眠更改為 5.6.9.Final 版本:
<hibernate.version>5.6.9.Final</hibernate.version>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.