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 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);

如何让休眠在映射中生成索引?

更新:

我发现,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 注释生成索引

意图尚不清楚,但这可能无法实施。从文档中:

4.4.3. Hibernate 映射文件导出器 ( <hbm2hbmxml>)

<hbm2hbmxml>生成一组 .hbm 文件。用于在执行逆向工程时与 a 一起使用,但可以与任何类型的配置一起使用。例如,从基于注解的 pojo 转换为 hbm.xml。

并非所有可能的映射转换都是可能的/实现的(欢迎贡献),因此可能需要进行一些手动编辑。

欢迎投稿:)

我想将现有数据库反向工程为 POJO。POJO 是从映射生成的,映射(使用 jdbcannotation-hbm2hbmxml 生成)没有任何索引。我相信这本质上是相同的问题:hbm2hbmxml 不生成索引。

您不必为此生成映射,您可以使用<hbm2java>. 也许您应该确切地解释您要做什么。

于 2010-08-23T16:04:09.390 回答