hibernate hbm2hbmxml - PullRequest
       10

hibernate hbm2hbmxml

3 голосов
/ 24 апреля 2009

Я пытаюсь использовать задачу ant hibernatetool для генерации файлов hbm.xml из моей схемы БД в mysql. Задача ant выполняется без ошибок, но файлы hbm.xml не создаются. Чего мне не хватает ...

Вот соответствующие настройки:

build.xml

<taskdef name="hibernatetool"
    classname="org.hibernate.tool.ant.HibernateToolTask"
    classpathref="3p-classpath">
</taskdef>

<target name="hbmxmlgen"
    description="Creating hbm xml files from DB">
    <hibernatetool>
        <jdbcconfiguration 
            configurationfile="src/config/hibernate.cfg.xml"
            revengfile="src/config/hibernate.reveng.xml"
            detectmanytomany="true">
        </jdbcconfiguration>
        <hbm2hbmxml destdir="${mappings.dir}"/>
    </hibernatetool>
</target>

SRC / конфигурации / hibernate.cfg.xml

<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration>
    <session-factory>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost/?useUnicode=true&characterEncoding=utf8</property>
        <property name="connection.username">root</property>
        <property name="connection.pool_size">1</property>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="current_session_context_class">thread</property>
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
        <property name="show_sql">true</property>
    </session-factory> </hibernate-configuration>

ЦСИ / конфигурации / reveng.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-reverse-engineering SYSTEM "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd">

<hibernate-reverse-engineering>
    <schema-selection match-schema="optimizer_config"/>
    <type-mapping>
        <sql-type jdbc-type="VARCHAR" hibernate-type="string"/>
        <sql-type jdbc-type="NUMERIC" hibernate-type="java.lang.Long" />
        <sql-type jdbc-type="INTEGER" hibernate-type="java.lang.Integer" />
        <sql-type jdbc-type="DECIMAL" hibernate-type="java.lang.Double" />
    </type-mapping>
    <table-filter match-name="*" package="com.sokrati.optimizer.dbaccess.optimizerConfig"/>
</hibernate-reverse-engineering>

Ответы [ 5 ]

2 голосов
/ 09 сентября 2009

У меня возникла та же проблема, и мне пригодились следующие 2 пункта:

  1. Регулярное выражение, используемое для match-name, если вы хотите, чтобы все таблицы, было '. *', Например <table-filter match-name=".*" package="com.sokrati.optimizer.dbaccess.optimizerConfig"/>

  2. Имейте в виду, что имена схем чувствительны к регистру, поэтому убедитесь в правильности регистра в вашем теге <schema-selection> в reveng.xml .

1 голос
/ 12 мая 2009

Я думаю, что table-filter не так.

Попробуйте:

<table-filter match-name="%" package="com.sokrati.optimizer.dbaccess.optimizerConfig"/>
0 голосов
/ 17 мая 2010

Тривиальная проблема. Проходил через аналогичную проблему. Странно, я должен был указать exclude = "false" для фильтра таблицы и работал для меня

0 голосов
/ 23 февраля 2010

Вы можете убедиться в следующих двух пунктах.

  1. сохранить правильную версию jar драйвера mysql в claaspath. (например, если вы используете mysql 5.x, вам нужна соответствующая версия jar драйвера mysql. Иногда со старой версией jar вы не столкнетесь с ошибками, но она не будет работать должным образом)

  2. Если возможно, попытайтесь изменить свойство следующим образом:

    <property name="connection.url">jdbc:mysql://localhost:3306/?useUnicode=true&characterEncoding=utf8</property>
0 голосов
/ 01 сентября 2009

Попробуйте это

<property name="connection.username">ROOT</property>
...