Данные не вставляются в базу данных JPA + Hibernate - PullRequest
2 голосов
/ 10 ноября 2010

На самом деле я создал Entity Beans, которые используются для создания таблиц в базе данных MySQL, все отлично работает с классами транзакций, используя entityfactory.

Теперь мне нужна эта функциональность ... когда я развертываю файл EAR всервер приложений JBOSS .. он должен проверить, существуют ли таблицы в базе данных или нет .. если они отсутствуют .. он должен создавать таблицы автоматически ... конечно, я указал эту функцию hibernate.hbm2ddl.auto =Обновление в persistence.xml..но все еще не создает никаких таблиц, которых нет в базе данных, и не выдает никакой ошибки также, когда я запускаю сервер приложений, он создает только таблицы mysql по умолчанию ... но не разработанные и вот явведите мой код:

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>

Может кто-нибудь подсказать, как это сделать, или скажите, если я что-то не так сделал ввышеуказанные файлы.

Заранее спасибо.

С наилучшими пожеланиями, Раджа.

Ответы [ 3 ]

1 голос
/ 10 ноября 2010

Возможно, ваши таблицы фактически создаются в базе данных, на которую указывает DefaultDS?В стандартной среде JBoss это база данных HypersonicSQL.Я бы удалил все ссылки DefaultDS из вашей конфигурации.

0 голосов
/ 25 января 2013

следующий файл 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="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>

0 голосов
/ 11 ноября 2010

(...) также, когда я запускаю сервер приложений, он создает только таблицы mysql по умолчанию, но не разработанные

Если вы не отвергли файл hsqldb-ds.xml, выне подключается к базе данных, вы думаете, что вы есть.

При развертывании приложения в JBoss поставщик сохраняемости использует источник данных JTA, глобальное имя JNDI которого определяется следующим элементом:

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

А не встроенным соединениемпул, который вы конфигурируете, используя специфичный для hibernate properties.

Если вы хотите подключиться к базе данных MySQL,

  1. создайте источник данных, указывающий на него
  2. используйтеэтот источник данных в вашем persistence.xml.

О шаге 1 см. Глава 8. Использование других баз данных (они предоставляют пример на основе MySQL).

Для шага # 2 типичным будет l 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...