休止状態の注釈を使用して、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 でインデックスを生成しません。