Java 必须至少存在一个JPA元模型!但它是生成的吗?

Java 必须至少存在一个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.

我目前尝试为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.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>