【问题标题】:JPA 2.1 does not insert rows from .sql file even when specifying it in persistence.xml即使在 persistence.xml 中指定,JPA 2.1 也不会从 .sql 文件中插入行
【发布时间】:2016-09-20 20:48:45
【问题描述】:

我正在尝试从 sql 文件插入 HSQL 数据库。我尝试遵循本教程https://antoniogoncalves.org/2014/12/11/generating-database-schemas-with-jpa-2-1/ 它不会从 sql 文件加载我的行。我不确定我哪里出错了。请帮忙。我的文件是:

persistence.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
version="2.1">
<persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL">
    <description>JPA Test</description>
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>com.jpa.entity.Person</class>
    <properties>

        <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" />
        <property name="hibernate.hbm2ddl.auto" value="create-drop" />
        <property name="hibernate.show_sql" value="true" />
        <property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver" />
        <property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:mem:unittests" />
        <property name="javax.persistence.jdbc.user" value="sa" />
        <property name="javax.persistence.jdbc.password" value="" />
        <property name="javax.persistence.sql-load-script-source"
            value="import.sql" />
    </properties>
</persistence-unit>

import.sql

    insert into table Person(person_ID, person_name, age) values(101, "Name1", 30 );
    insert into Person(person_ID, person_name, age) values(102, "Name2", 30 );

Person.java

    package com.jpa.entity;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.OneToMany;
    import javax.persistence.Table;

    @Entity
    @Table(name="Person")
    public class Person {

@Id
@Column(name="person_ID")
private int id;

@Column(name="person_name")
private String name;

@Column(name="age")
private int age;

//generated public getters and setters

DemoJPA.java

    package com.jpa.demo;
    import javax.persistence.EntityManager;
    import javax.persistence.EntityManagerFactory;
    import javax.persistence.Persistence;

    import com.jpa.entity.Person;
    public class DemoJPA {

private static final EntityManagerFactory emf;
static{

    emf = Persistence.createEntityManagerFactory("persistenceUnit");
}
public static EntityManager getEntityManager(){
    return emf.createEntityManager();
}
public static void main(String[] args) {
    // TODO Auto-generated method stub

    Persistence.generateSchema("persistenceUnit", null);
    EntityManager em = getEntityManager();  
    em.getTransaction().begin();

    Person f = new Person();
    f.setId(1);
    f.setName("Name1");
    f.setAge(29);
    em.persist(f);

    em.getTransaction().commit();
    em.clear();
    System.out.println("Done");

        }
    }

我的文件夹结构是: folderStructure

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.jpa.entity</groupId>
      <artifactId>JPA2Project</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <build>
        <sourceDirectory>src</sourceDirectory>
        <plugins>
          <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.3</version>
            <configuration>
              <source>1.7</source>
              <target>1.7</target>
            </configuration>
          </plugin>
        </plugins>
      </build>
      <properties>
          <hibernate.version>4.3.5.Final</hibernate.version>
        <slf4j.version>1.7.5</slf4j.version>
        <log4j.version>1.7.5</log4j.version>
    </properties>
      <dependencies>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <dependency>
          <groupId>org.hibernate</groupId>
          <artifactId>hibernate-entitymanager</artifactId>
          <version>${hibernate.version}</version>
        </dependency>
         <dependency>
      <groupId>org.hsqldb</groupId>
      <artifactId>hsqldb</artifactId>
      <version>2.3.2</version>
     </dependency>
         <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${log4j.version}</version>
        </dependency>
    </dependencies>
    </project>

【问题讨论】:

  • 您的导入文件中似乎有错误。第一行是“插入表...”,但应该是“插入...”
  • 我认为它会抛出一个 sqlexception,因为插入时出错。我删除了它。它仍然没有拾取sql文件
  • 您是否尝试过设置相对于 src 文件夹的路径?比如'main/resources/import.sql'
  • 是的。我试过了。它没有做任何事情。我拾取文件的设置是否正确?我是否还应该添加一些其他技术来帮助 JPA 获取文件
  • 通常,生成模式(或)插入数据的初始加载脚本将保存在 META-INF/ 文件夹下,并从 xml 加载为“META-INF/import.sql”文件。参考项目github.com/hantsy/ee7-sandbox/wiki/jpa-scripts

标签: java hibernate maven hsqldb jpa-2.1


【解决方案1】:

persistence.xml文件的末尾,我在属性标签中添加了以下代码:

    <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
    <property name="javax.persistence.schema-generation.create-source" value="metadata"/>
    <property name="javax.persistence.schema-generation.drop-source" value="metadata"/>
    <property name="javax.persistence.sql-load-script-source" value="import.sql"/>

import.sql 文件位于src/main/resources 文件夹中。我们也可以把它放在META-INF文件夹中,引用为META-INF/import.sql, 我还用正确的查询编辑了import.sql。 如果我们需要模型,即 @Entity(aka metadata) 来管理数据库模式,则使用此代码。

【讨论】:

  • 我的问题是我还指定了属性eclipselink.ddl-generation,因为javax.persistence.sql-load-script-source被忽略了。
猜你喜欢
  • 2014-02-04
  • 1970-01-01
  • 2023-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-24
  • 2017-11-20
  • 1970-01-01
相关资源
最近更新 更多