HibernateToolTask ​​(hbm2hbmxml) не генерирует индекс в отображении hibernate из аннотаций @ org.hibernate.annotations.Index. - PullRequest
2 голосов
/ 23 августа 2010

Я пытаюсь сгенерировать отображение спящего режима из POJO с аннотациями спящего режима.Затем я хочу использовать liquibase для генерации схемы базы данных.Поэтому мне нужно, чтобы индексы были определены в моих POJO.

Пример POJO:

@Entity
public class A {

    @Id
    @GeneratedValue
    private Long id;

    @Index(name = "IDX_NAME")
    @ForeignKey(name="sd")
    private String name;
}

Но когда я запускаю HibernateToolTask ​​в ant:

<hibernateTool>
    <classpath>
        <path location="${path}"/>
    </classpath>
    <annotationconfiguration configurationfile="src/hibernate.cfg.xml"/>
        <hbm2hbmxml destdir="${project.dir}"/>
        <hbm2ddl destdir="database/liquibase" export="false" outputfilename="update_${stamp}.sql" />
</hibernateTool>

Я не получаю никаких индексов в отображении:

<class name="A" table="A">
    <id name="id" type="java.lang.Long" access="field">
        <column name="id" />
        <generator class="native"></generator>
    </id>
    <property name="name" type="java.lang.String" access="field">
        <column name="name" />
    </property>
</class>

В то же время, когда я делаю hbm2ddl - генерируется 'create index':

create table A (id bigint not null auto_increment, name varchar(255), primary key (id)) type=InnoDB;
create index IDX_NAME on A (name);

Как заставить hibernate генерировать индексы в отображении?

ОБНОВЛЕНИЕ:

Я обнаружил, что жидкость-база использует аннотации для генерации схемы, поэтому эта часть проблемы решена.У меня еще есть другой:

Я хочу преобразовать существующую базу данных в POJO.POJO генерируются из отображения, а отображение (генерируется с использованием jdbcannotation-hbm2hbmxml) не имеет индексов.Я считаю, что это по сути та же проблема: hbm2hbmxml не генерирует индексы.

ОБНОВЛЕНИЕ 2:

Зачем мне это нужно?У меня есть существующая схема базы данных.Я использовал, чтобы изменить его, а затем перепроектировать POJO.Теперь я хочу работать с POJO и генерировать сопоставления и схемы с помощью аннотаций.

Поэтому я хотел бы, чтобы POJO соответствовали текущей схеме базы данных, чтобы продолжить работу с ними.Очевидно, все, кроме имен и индексов внешних ключей, совпадает.Но hbm2java не генерирует аннотацию @Index. Например,

<hibernateTool>
    <jdbcconfiguration propertyfile="${build.dir}/etc/hibernate.properties" packagename="${doPackageName}"/>
    <hbm2java destdir="${destinationDir}" jdk5="true" ejb3="true"/>
    <hbm2ddl destdir="${destinationDir}" export="false" outputfilename="update_${stamp}.sql" />
</hibernateTool>

Эта задача генерирует индексы в ddl и не генерирует индексы в POJO.

1 Ответ

1 голос
/ 23 августа 2010

HibernateToolTask ​​(hbm2hbmxml) не генерирует индекс в отображении hibernate из аннотаций @ o.h.a.Index

Намерение неясно, но это может быть просто не реализовано. Из документации:

4.4.3. Экспортер файлов отображения Hibernate (<hbm2hbmxml>)

<hbm2hbmxml> генерирует набор .hbm файлы. Предназначен для использования вместе с когда выполняет обратный инжиниринг, но может быть использован с любым видом конфигурации. например конвертировать из основанные на аннотации pojo в hbm.xml.

Не все возможные преобразования преобразования возможны / осуществлены (приветствуются материалы), поэтому может потребоваться некоторое ручное редактирование.

Взносы приветствуются:)

Я хочу преобразовать существующую базу данных в POJO. POJO генерируются из отображения, а отображение (генерируется с использованием jdbcannotation-hbm2hbmxml) не имеет индексов. Я считаю, что это по сути та же проблема: hbm2hbmxml не генерирует индексы.

Для этого вам не нужно создавать сопоставление, вы можете сгенерировать аннотации EJB 3 POJO из базы данных с помощью <hbm2java>. Может быть, вам стоит объяснить, что именно вы пытаетесь сделать.

...