3

我正在尝试使用 ant hibernatetool 任务从 mysql 中的 db 模式生成 hbm.xml 文件。ant 任务运行没有错误,但没有生成 hbm.xml 文件。我错过了什么...

以下是相关配置:

构建.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/config/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>

src/config/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>
4

5 回答 5

2

我遇到了同样的问题,发现以下两点很有用:

  1. 如果您想要所有表,则用于匹配名称的正则表达式是 '.*' 例如 <table-filter match-name=".*" package="com.sokrati.optimizer.dbaccess.optimizerConfig"/>

  2. 请注意,模式名称区分大小写,因此请确保reveng.xml<schema-selection>中的标记中的大小写正确。

于 2009-09-09T10:16:10.407 回答
1

我认为table-filter是错误的。

尝试:

<table-filter match-name="%" package="com.sokrati.optimizer.dbaccess.optimizerConfig"/>
于 2009-05-12T14:56:24.797 回答
0

尝试这个

<property name="connection.username">ROOT</property>
于 2009-09-01T19:32:10.907 回答
0

你能确定以下两点吗?

  1. 在 claaspath 中保留正确版本的 mysql 驱动程序 jar。(例如,如果您使用的是 mysql 5.x,那么您需要相应版本的 mysql 驱动程序 jar。有时使用旧版本的 jar 您不会遇到错误,但它不会按预期工作)

  2. 如果可能,请尝试修改属性,例如:

    <property name="connection.url">jdbc:mysql://localhost:3306/?useUnicode=true&characterEncoding=utf8</property>
于 2010-02-23T12:09:51.997 回答
0

琐碎的问题。正在经历类似的问题。奇怪我不得不为表过滤器指定 exclude="false" 并为我工作

于 2010-05-17T14:23:42.130 回答