Eclipselink:persistence.xml连接到derby glassfish localhost数据库(创建并填充数据库)

时间:2014-01-15 12:47:10

标签: java xml jpa glassfish eclipselink

我需要使用eclipselink连接到localhost derby数据库(在glassfish 4中)。 我想从类或sql脚本生成数据库。 在persistence.xml文件中我有:

  <persistence-unit name="chapter04PU" transaction-type="JTA">
     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
     <class>org.agoncal.book.javaee7.chapter04.Book</class>
     <properties>
     <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
     <property name="javax.persistence.schema-generation.scripts.action" value="drop-and-create"/>
     <property name="javax.persistence.schema-generation.scripts.create-target" value="chapter04Create.ddl"/>
     <property name="javax.persistence.schema-generation.scripts.drop-target" value="chapter04Drop.ddl"/>
     <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/>
     <property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/chapter04DB;create=true"/>
     <property name="javax.persistence.jdbc.user" value="APP"/>
     <property name="javax.persistence.jdbc.password" value="APP"/>
     <property name="javax.persistence.sql-load-script-source" value="insert.sql"/>
     <property name="eclipselink.logging.level" value="INFO"/>
     </properties>

1 个答案:

答案 0 :(得分:1)

我可以让它发挥作用。上面的持久性单元是正确的。 假设在Entity Book类中,id具有以下注释:      @ID      @GeneratedValue      私人长身份;

使用以下持久性单元:

   <persistence-unit name="Book"  transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
     <class>com.tutorial.Book</class>
      <properties>
       <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
       <property name="javax.persistence.schema-generation.scripts.action" value="drop-and-create"/>
       <property name="javax.persistence.schema-generation.scripts.create-target" value="create.ddl"/>
       <property name="javax.persistence.schema-generation.scripts.drop-target" value="drop.ddl"/>
       <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/>
       <property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/library_db;create=true"/>
       <property name="javax.persistence.jdbc.user" value="APP"/>
       <property name="javax.persistence.jdbc.password" value="APP"/>
       <property name="javax.persistence.sql-load-script-source" value="insert.sql"/>
       <property name="eclipselink.logging.level" value="INFO"/>
   </properties>

脚本如下:

create.ddl ------------------------------------- -----------------------

CREATE TABLE book (
    ID BIGINT NOT NULL,
    DESCRIPTION VARCHAR(255),
    ILLUSTRATIONS SMALLINT DEFAULT 0,
    ISBN VARCHAR(255),
    NBOFPAGE INTEGER,
    PRICE FLOAT,
    TITLE VARCHAR(255),
    PRIMARY KEY (ID))

CREATE TABLE SEQUENCE (
    SEQ_NAME VARCHAR(50) NOT NULL,
    SEQ_COUNT DECIMAL(15),
    PRIMARY KEY (SEQ_NAME))

INSERT INTO SEQUENCE(SEQ_NAME, SEQ_COUNT) values ('SEQ_GEN', 0)

drop.ddl ------------------------------------- -------------

DROP TABLE book

DELETE FROM SEQUENCE WHERE SEQ_NAME = 'SEQ_GEN'

<强> insert.sql ------------------------------------- ---

INSERT INTO BOOK(ID, TITLE, DESCRIPTION, ILLUSTRATIONS, ISBN, NBOFPAGE, PRICE)
values (1000, 'Beginning Java EE 6', 'Best Java EE book ever', 1, '1234-5678', 450, 49)

INSERT INTO BOOK(ID, TITLE, DESCRIPTION, ILLUSTRATIONS, ISBN, NBOFPAGE, PRICE)
values (1001, 'Beginning Java EE 7', 'No, this is the best ', 1, '5678-9012', 550, 53)