我正在尝试使用hibernate注释从POJO生成hibernate映射。然后,我想使用液化数据库生成数据库模式。因此,我需要在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);如何使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中不生成索引。
发布于 2010-08-23 16:04:09
HibernateToolTask (hbm2hbmxml)不会在hibernate中从@o.h.a.Index注释中生成索引。
其意图尚不明确,但这可能只是没有得到落实。从文件中:
4.4.3. Hibernate Mapping files exporter ()
<hbm2hbmxml>生成一组.hbm文件。用于与执行逆向工程时一起使用,但可用于任何类型的配置。例如,将基于注释的pojo转换为hbm.xml。
并不是所有可能的映射转换都是可能的/实现的(欢迎贡献),因此可能需要进行一些手工编辑。
欢迎捐款:)
我想将现有数据库反向工程到POJO。POJO是通过映射生成的,并且映射(使用jdbcannotation-hbm2hbmxml生成)没有任何索引。我认为这本质上是同一个问题: hbm2hbmxml不生成索引。
您不必为此生成映射,您可以使用从数据库生成EJB 3带注释的POJO。也许你应该解释一下你到底想做什么。
https://stackoverflow.com/questions/3549107
复制相似问题