2

休止状態の注釈を使用して、POJO から休止状態のマッピングを生成しようとしています。次に、liquibase を使用してデータベース スキーマを生成します。そのため、POJO でインデックスを定義する必要があります。

サンプル POJO:

@Entity
public class A {

    @Id
    @GeneratedValue
    private Long id;

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

しかし、ant で HibernateToolTask​​ を実行すると、次のようになります。

<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 table A (id bigint not null auto_increment, name varchar(255), primary key (id)) type=InnoDB;
create index IDX_NAME on A (name);

マッピングで休止状態にインデックスを生成させるにはどうすればよいですか?

アップデート:

私は、liquibase が注釈を使用してスキーマを生成することを発見したので、問題のこの部分は解決されました。私はまだ別のものを持っています:

既存のデータベースを 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 でインデックスを生成しません。

4

1 に答える 1

1

HibernateToolTask​​ (hbm2hbmxml) が @ohaIndex アノテーションから hibernate-mapping でインデックスを生成しない

意図は明確ではありませんが、これは実装されていない可能性があります。ドキュメントから:

4.4.3. Hibernate マッピング ファイル エクスポーター ( <hbm2hbmxml>)

<hbm2hbmxml>一連の .hbm ファイルを生成します。リバース エンジニアリングを実行するときに と一緒に使用することを意図していますが、どのような構成でも使用できます。たとえば、注釈ベースの pojo から hbm.xml に変換します。

すべての可能なマッピング変換が可能/実装されているわけではありません (貢献を歓迎します)。

貢献を歓迎します:)

既存のデータベースを POJO にリバース エンジニアリングしたいと考えています。POJO はマッピングから生成され、マッピング (jdbcannotation-hbm2hbmxml を使用して生成) にはインデックスがありません。これは本質的に同じ問題だと思います: hbm2hbmxml はインデックスを生成しません。

このためのマッピングを生成する必要はありません。 を使用して、データベースから EJB 3 アノテーション付き POJO を生成できます<hbm2java>。たぶん、何をしようとしているのかを正確に説明する必要があります。

于 2010-08-23T16:04:09.390 に答える