2010-11-10 71 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