Java 必须至少存在一个JPA元模型!但它是生成的吗?
我目前尝试为Spring+JPA+Hibernate创建一个Spring最小示例 我创建了以下类: AppConfig.classJava 必须至少存在一个JPA元模型!但它是生成的吗?,java,spring,hibernate,maven,jpa,Java,Spring,Hibernate,Maven,Jpa,我目前尝试为Spring+JPA+Hibernate创建一个Spring最小示例 我创建了以下类: AppConfig.class package test; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.data.jpa.repository.
package test;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
@Configuration
@ComponentScan(basePackageClasses = AppConfig.class)
@EnableJpaRepositories(basePackageClasses = Employee.class)
public class AppConfig {
}
AppMain.class
package test;
import java.util.List;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
public class AppMain {
public static void main(String args[]) {
AbstractApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
EmployeeRepository service = (EmployeeRepository) context.getBean("AccountRepository");
/*
* Create Employee1
*/
Employee employee1 = new Employee();
employee1.setName("name1");
/*
* Create Employee2
*/
Employee employee2 = new Employee();
employee2.setName("name2");
/*
* Persist both Employees
*/
service.save(employee1);
service.save(employee2);
List<Employee> emps = service.findAll();
for (Employee emp : emps) {
System.out.println(emp);
}
context.close();
}
}
存储库
package test;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
Employee findOneByName(String name);
List<Employee> findAllByOrderByIdAsc();
}
应用程序.properties
jdbc.driverClassName = org.h2.Driver
jdbc.url = jdbc:h2:./test
jdbc.username = myuser
jdbc.password = mypassword
hibernate.dialect = org.hibernate.dialect.H2Dialect
hibernate.show_sql = false
hibernate.format_sql = false
最后是pom.xml
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.websystique.spring</groupId>
<artifactId>Spring4HibernateExample</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<name>Spring4HibernateExample</name>
<properties>
<springframework.version>4.0.6.RELEASE</springframework.version>
<hibernate.version>4.3.6.Final</hibernate.version>
<mysql.version>5.1.31</mysql.version>
<joda-time.version>2.3</joda-time.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.10.1.RELEASE</version>
</dependency>
<!-- Hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.191</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.5.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
4.0.0
com.websystemque.spring
Spring4Hibernate示例
1.0.0
罐子
Spring4Hibernate示例
4.0.6.1发布
4.3.6.最终版本
5.1.31
2.3
1.8
1.8
org.springframework
弹簧芯
${springframework.version}
org.springframework
spring上下文
${springframework.version}
org.springframework
德克萨斯州春季
${springframework.version}
org.springframework
春季甲虫
${springframework.version}
org.springframework.data
spring数据jpa
1.10.1.发布
org.hibernate
冬眠核心
${hibernate.version}
org.hibernate
冬眠
${hibernate.version}
org.hibernate.javax.persistence
hibernate-jpa-2.1-api
1.0.0.1决赛
org.hibernate
休眠实体管理器
${hibernate.version}
com.h2数据库
氢
1.4.191
org.eclipse.persistence
日食
2.5.2
maven编译器插件
3.5.1
1.8
1.8
如果我尝试运行该示例,我会得到:
…原因:java.lang.IllegalArgumentException:必须至少存在一个JPA元模型
但是我可以在目标文件夹中看到自动生成的元模型文件。我遗漏了什么?当我试图通过spring boot starter数据jpa 1.3.0.RELEASE将hibernate entitymanager版本5.2.1.Final与spring boot一起使用时,我看到了相同的错误消息 我也看到了在目标/生成的源/注释中生成的元模型对象
使用较旧的4.3.11.Final版本可以正常工作-无错误。对我来说,这看起来像是spring boot和hibernate版本之间的版本不兼容,也许这是有帮助的。值得一提的是,当我试图通过spring boot starter数据jpa 1.3.0.RELEASE将hibernate entitymanager 5.2.1.Final与spring boot一起使用时,我看到了相同的错误消息 我也看到了在目标/生成的源/注释中生成的元模型对象
使用较旧的4.3.11.Final版本可以正常工作-无错误。对我来说,这看起来像是spring boot和hibernate版本之间的版本不兼容,也许这是有帮助的。如果不单独使用JPA API,为什么还要继续讨论JPA元模型?SessionFactory/Session是HibernateAPI,在任何JPA应用程序中都没有位置,主要是因为我不知道,我认为它是必要的。你能去除所有无用的东西吗?在基于JPA的应用程序中,您应该使用类似于
LocalContainerEntityManagerFactoryBean
的东西来构造EntityManager
和JpaTransactionManager
,它以EntityManagerFactory
@naros为例,您有一个工作示例或链接吗?当您不单独使用JPAAPI?SessionFactory/Session是HibernateAPI,在任何JPA应用程序中都没有位置,主要是因为我不知道,我认为它是必要的。你能去除所有无用的东西吗?在基于JPA的应用程序中,您应该使用类似于LocalContainerEntityManagerFactoryBean
的东西来构造EntityManager
和JpaTransactionManager
,它以EntityManager工厂的实例为例@naros您有工作示例或链接吗?我在hibernate 5.2.1最终版本上也发现了同样的问题因此,我升级到5.2.2,现在它可以与spring boot 1.4.1配合使用。我在hibernate 5.2.1最终版本上也发现了同样的问题,所以我升级到5.2.2,现在它可以与spring boot 1.4.1配合使用
jdbc.driverClassName = org.h2.Driver
jdbc.url = jdbc:h2:./test
jdbc.username = myuser
jdbc.password = mypassword
hibernate.dialect = org.hibernate.dialect.H2Dialect
hibernate.show_sql = false
hibernate.format_sql = false
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.websystique.spring</groupId>
<artifactId>Spring4HibernateExample</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<name>Spring4HibernateExample</name>
<properties>
<springframework.version>4.0.6.RELEASE</springframework.version>
<hibernate.version>4.3.6.Final</hibernate.version>
<mysql.version>5.1.31</mysql.version>
<joda-time.version>2.3</joda-time.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.10.1.RELEASE</version>
</dependency>
<!-- Hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.191</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.5.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>