Конфигурирование hibernate.reveng.xml для обнаружения генератора последовательности PK с помощью hibernate3-maven-plugin и Postgre - PullRequest
4 голосов
/ 06 июня 2010

Есть ли способ настроить hibernate3-maven-plugin так, чтобы генератор последовательности был обнаружен для primary-key? Я использую подход «снизу вверх» для конфигурации hibernate (что означает, что hibernate-tools может генерировать конфигурацию гибернации, используя для вас jdbc-connection через reverse-engineering в существующей схеме базы данных). Я уже прочитал это , но также это (эти два могут быть не связаны, но также могут оставлять подсказку). Мой hibernate.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>
    <table name="ORDERS">
        <primary-key>
            <!-- setting up a specific id generator for a table -->
            <generator class="sequence">
                <param name="sequence">ORDERS_ORDER_ID_seq</param>
            </generator>
            <key-column name="ORDER_ID"/>
        </primary-key>
    </table>
</hibernate-reverse-engineering>

И я ожидаю, что он сгенерирует Orders.hbm.xml файл, подобный этому:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2010-06-06 18:55:42 by Hibernate Tools 3.2.2.GA -->
<hibernate-mapping>
    <class name="some.package.Orders" table="orders" schema="public">
        <id name="orderId" type="long">
            <column name="order_id" />
            <generator class="sequence">
                <param name="sequence">ORDERS_ORDER_ID_seq</param>
            </generator>
        </id>
    ...
    </class>
</hibernate-mapping>

... но получаю это вместо:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2010-06-06 18:55:42 by Hibernate Tools 3.2.2.GA -->
<hibernate-mapping>
    <class name="some.package.Orders" table="orders" schema="public">
        <id name="orderId" type="long">
            <column name="order_id" />
            <generator class="assigned" />
        </id>
    ...
    </class>
</hibernate-mapping>

Я знаю, что hibernate.reveng.xml читается hibernate3-maven-plugin, так как я испытываю maven ошибки, когда в файле появляются синтаксические ошибки, поэтому pom.xml кажется правильным и hibernate.reveng.xml синтаксически правильным.

Есть какие-нибудь подсказки?

Ответы [ 2 ]

4 голосов
/ 07 июня 2010

Ниже кода, который работал для меня в конце концов.Мне просто нужно было передать имя таблицы order в нижнем регистре (я использовал заглавные буквы в моем DDL, так что я на самом деле не понимаю, но это работает)Также необходимо указать атрибут schema.<key-column name="pkey"/> является необязательным (если вы соблюдаете соглашение об именовании в спящем режиме).

<?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>
    <table name="orders" schema="public">
        <primary-key>
            <!-- setting up a specific id generator for a table -->
            <generator class="sequence">
                <param name="sequence">ORDERS_ORDER_ID_seq</param>
            </generator>
        </primary-key>
    </table>
</hibernate-reverse-engineering>
3 голосов
/ 07 июня 2010

Не могли бы вы попробовать с <param name="table">...</param> (это то, что я вижу в документации или в этой теме ).Так что-то вроде этого:

<?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>
    <table name="ORDERS">
        <primary-key>
            <!-- setting up a specific id generator for a table -->
            <generator class="sequence">
                <param name="table">ORDERS_ORDER_ID_seq</param>
            </generator>
            <key-column name="ORDER_ID"/>
        </primary-key>
    </table>
</hibernate-reverse-engineering>
...