2010-11-10 70 views
2

其實我已經創建了用於創建在MySQL數據庫表的實體Bean,一切都用entityfactory工作的罰款與事務類。數據未插入到數據庫JPA + Hibernate的

現在我需要這個功能......當我在部署應用程序的EAR文件斷絕JBOSS..it必須檢查是否有表在數據庫或not..if他們不present..it有現有創建表automatically..of當然,我已經指定在persistence.xml..but此功能hibernate.hbm2ddl.auto =更新仍然沒有創造它不存在於數據庫中的任何表,而不是拋出任何錯誤也當過我運行應用服務器創建它的唯一的MySQL默認tables..but不發達國家和我在這裏給我的代碼:

package com.ernst.persistenceImpl.beanImpl; 

import com.ernst.persistenceAPI.beanAPI.NrKreiseBeanAPI; 
import com.ernst.persistenceAPI.localBeanAPI.NrKreiseLocalBeanAPI; 
import com.ernst.persistenceAPI.remoteBeanAPI.NrKreiseRemoteBeanAPI; 

import javax.persistence.Entity; 
import javax.persistence.Table; 
import javax.persistence.Id; 
import javax.persistence.Basic; 
import java.io.Serializable; 

@Entity 
@Table(name = "NR_KREISE") 
public class NrKreiseBean implements NrKreiseBeanAPI, NrKreiseLocalBeanAPI, 
NrKreiseRemoteBeanAPI, Serializable { 

    @Id 
    private int nr_kreise_id; 

    @Basic 
    private int fk_nr_typ; 

    @Basic 
    private int data_ref_von; 

    @Basic 
    private int data_ref_bis; 

    @Basic 
    private int data_ref; 

    @Basic 
    private int msg_ref_von; 

    @Basic 
    private int msg_ref_bis; 

    @Basic 
    private int msg_ref; 

    @Basic 
    private String desc; 

    public int getNr_kreise_id() { 
     return nr_kreise_id; 
    } 

    public void setNr_kreise_id(int nr_kreise_id) { 
     this.nr_kreise_id = nr_kreise_id; 
    } 

    public int getFk_nr_typ() { 
     return fk_nr_typ; 
    } 

    public void setFk_nr_typ(int fk_nr_typ) { 
     this.fk_nr_typ = fk_nr_typ; 
    } 

    public int getData_ref_von() { 
     return data_ref_von; 
    } 

    public void setData_ref_von(int data_ref_von) { 
     this.data_ref_von = data_ref_von; 
    } 

    public int getData_ref_bis() { 
     return data_ref_bis; 
    } 

    public void setData_ref_bis(int data_ref_bis) { 
     this.data_ref_bis = data_ref_bis; 
    } 

    public int getData_ref() { 
     return data_ref; 
    } 

    public void setData_ref(int data_ref) { 
     this.data_ref = data_ref; 
    } 

    public int getMsg_ref_von() { 
     return msg_ref_von; 
    } 

    public void setMsg_ref_von(int msg_ref_von) { 
     this.msg_ref_von = msg_ref_von; 
    } 

    public int getMsg_ref_bis() { 
     return msg_ref_bis; 
    } 

    public void setMsg_ref_bis(int msg_ref_bis) { 
     this.msg_ref_bis = msg_ref_bis; 
    } 

    public int getMsg_ref() { 
     return msg_ref; 
    } 

    public void setMsg_ref(int msg_ref) { 
     this.msg_ref = msg_ref; 
    } 

    public String getDesc() { 
     return desc; 
    } 

    public void setDesc(String desc) { 
     this.desc = desc; 
    } 
} 

persistence.xml文件:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
     http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" 
    version="1.0"> 
    <persistence-unit name="DefaultDS" transaction-type="JTA"> 
     <jta-data-source>java:/DefaultDS</jta-data-source> 
     <class>com.ernst.persistenceImpl.beanImpl.NrKreiseBean</class> 
     <properties> 
      <property name="jboss.entity.manager.factory.jndi.name" 
       value="persistence-units/DefaultDS" /> 
      <property name="hibernate.ejb.cfgfile" 
         value="WEB-INF.classes.META-INF.hibernate.cfg.xml" /> 
      <property name="hibernate.dialect" 
         value="org.hibernate.dialect.MySQLDialect" /> 
      <property name="hibernate.connection.driver_class" 
         value="com.mysql.jdbc.Driver" /> 
      <property name="hibernate.connection.url" 
         value="jdbc:mysql://localhost:3306/lagerstandnew" /> 
      <property name="hibernate.connection.username" value="root" /> 
      <property name="hibernate.connection.password" value="sekhar" /> 

      <!-- Scan for annotated classes and Hibernate mapping XML files --> 
      <property name="hibernate.archive.autodetection" 
         value="class, hbm" /> 
      <property name="hibernate.hbm2ddl.auto" 
         value="create" /> 
      <!-- SQL stdout logging --> 
      <property name="hibernate.format_sql" value="true" /> 
      <property name="hibernate.show_sql" value="true" /> 
      <property name="use_sql_comments" value="true" /> 
     </properties> 
    </persistence-unit> 
</persistence> 

任何一個可以請給我一個想法如何做到這一點還是請告訴我,如果我做錯了什麼在上面的文件。

在此先感謝。

最好的問候, 拉賈。

回答

0

以下的持久性。XML完美的作品

<?xml version="1.0" encoding="UTF-8"?> 
    <persistence xmlns="http://java.sun.com/xml/ns/persistence" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
         http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> 

<persistence-unit name="lagerstand_local" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 

    <non-jta-data-source>dataSource</non-jta-data-source> 

    <properties> 
     <property name="hibernate.dialect" value="com.ernst.ernstWeb.mySqlDialectExtended.MySqlDialectExtended"/> 
     <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> 

     <property name="hibernate.connection.url" 
        value="jdbc:mysql://localhost:3306/lagerstand?autoReconnect=true"/> 
     <property name="hibernate.connection.username" value="root"/> 
     <property name="hibernate.connection.password" value="sekhar"/> 
     <property name="hibernate.archive.autodetection" value="hbm, class"/> 
     <property name="hibernate.generate_statistics" value="true"/> 
     <property name="hibernate.cache.use_structured_entries" value="true"/> 
     <property name="hibernate.format_sql" value="true"/> 
     <property name="hibernate.show_sql" value="false"/> 
     <property name="use_sql_comments" value="false"/> 
     <property name="hibernate.hbm2ddl.auto" value="update"/> 

    </properties> 

</persistence-unit> 

1

也許你的表實際上是被在數據庫中創建由DefaultDS的指向?在一個HypersonicSQL數據庫的標準JBoss環境中。我會從您的配置中刪除所有DefaultDS參考。

+0

+1的第一個答案 – willcodejavaforfood 2010-11-10 14:45:54

+0

但在這裏lagerstandnew..but命名不是必需的表數據庫及其創建的默認表。 – user503285 2010-11-11 13:31:11

0

(...)也當過我運行其創建,僅在MySQL默認的表,但不是發達國家

除非你推翻了hsqldb-ds.xml文件的應用程序服務器,你是不是連接到數據庫你認爲你是。

當您部署在JBoss應用,持久者正在使用誰的全局JNDI名稱由以下元素指定的JTA數據源:

<jta-data-source>java:/DefaultDS</jta-data-source> 

,而不是內建的連接池配置使用hibernate特定的properties

如果你想連接到你的MySQL數據庫,

  1. 創建您的persistence.xml
  2. 使用指向該數據源的數據源。

對於第1步,請參閱Chapter 8. Using other Databases(它們提供了一個基於MySQL的示例)。

對於步驟#2中,一個。典型persistence.xml將是(假設MySQL數據源是MySqlDS):

<?xml version="1.0" encoding="UTF-8"?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
     http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" 
    version="1.0"> 
    <persistence-unit name="DefaultDS" transaction-type="JTA"> 
     <jta-data-source>java:/MySqlDS</jta-data-source> 
     <class>com.ernst.persistenceImpl.beanImpl.NrKreiseBean</class> 
     <properties> 
      <property name="hibernate.ejb.cfgfile" 
         value="WEB-INF.classes.META-INF.hibernate.cfg.xml" /> 

      <!-- Scan for annotated classes and Hibernate mapping XML files --> 
      <property name="hibernate.archive.autodetection" 
         value="class, hbm" /> 
      <property name="hibernate.hbm2ddl.auto" 
         value="create" /> 
      <!-- SQL stdout logging --> 
      <property name="hibernate.format_sql" value="true" /> 
      <property name="hibernate.show_sql" value="true" /> 
      <property name="use_sql_comments" value="true" /> 
     </properties> 
    </persistence-unit> 
</persistence> 
+0

您好,感謝的reply..actually我使用不同的JNDI名稱幾乎相同的XML文件,因爲在MySQL-ds.xml文件我使用DefaultDS的作爲我的JNDI name..but它不是建立在數據庫所需的表lagerstandnew但它的創建數據庫中的默認表。 – user503285 2010-11-11 13:28:44

+0

您好,感謝的reply..actually我使用不同的JNDI名稱幾乎相同的XML文件,因爲在MySQL-ds.xml文件我使用DefaultDS的作爲我的JNDI name..but它不是建立在數據庫所需的表lagerstandnew但它的創建數據庫中的默認表。這些是我迄今爲止所做的步驟。第1步:創建實體豆。第2步:創建persistence.xml文件,然後根據我的配置更改mysql-ds.xml文件的配置後,創建EAR文件並部署到JBOSS中。所以請告訴我,我還需要做些什麼來自動生成MySQL表。 – user503285 2010-11-11 13:34:39