2016-05-23 15 views
1

sqlファイルからHSQLデータベースに挿入しようとしています。私はこのチュートリアルの後に試しましたhttps://antoniogoncalves.org/2014/12/11/generating-database-schemas-with-jpa-2-1/ それはSQLファイルから自分の行をロードしません。私はどこが間違っているのか分からない。助けてください。私のファイルは、以下のとおりです。JPA 2.1はpersistence.xmlで指定しても、.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"); 

     } 
    } 

マイフォルダ構造がある:persistence.xmlで 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> 
+0

インポートファイルにエラーがあるようですが、最初の行は「テーブルに挿入...」ですが、「挿入する」... – Stan

+0

私はそれを削除しました。まだそれはピックアップのSQLファイル – manu

+0

あなたはsrcフォルダの相対パスを設定しようとしましたか? 'main/resources/import.sql'のように – K139

答えて

1

、私が終わりにプロパティタグに次のコードを追加:

<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"/> 

insert.sqlファイルはsrc/main/resourcesフォルダーに置かれます。 META-INFフォルダに置いて、META-INF/import.sql として参照することもできます。 このコードは、モデルが必要な場合に使用します。つまり、@Entity(別名メタデータ)を使用してデータベーススキーマを管理します

関連する問題