如何使用@Index JPA注释在主键上设置索引名称?

时间:2014-09-14 11:01:55

标签: oracle hibernate jpa oracle11g jpa-2.1

我的工具 - > Java 8,JPA 2.1和Hibernate 4.我只使用JPA2.1注释。

停靠栏中的代码 - >

@Entity
@Table(indexes = { @Index(name = INDEX_PK, columnList = ID) })
public class Invoice {

 @Id
 @GeneratedValue(strategy = GenerationType.AUTO, generator = DEF_GEN_NAME)
 @SequenceGenerator(sequenceName = DEF_SEQUENCE_NAME, name = DEF_GEN_NAME, allocationSize =   
 ALLOCATION_SIZE)
 @Column(name = ID)
 private Long id = 0L;

}

当Hibernate创建schemma时(hbm2ddl =“create-drop”),我收到以下Oracle错误:

Hibernate: create index INVOICE_ID_PK on Invoice (ID)
sep 14, 2014 7:00:53 AM org.hibernate.tool.hbm2ddl.SchemaExport perform
ERROR: HHH000389: Unsuccessful: create index INVOICE_ID_PK on Invoice (ID)
sep 14, 2014 7:00:53 AM org.hibernate.tool.hbm2ddl.SchemaExport perform
ERROR: ORA-01408: such column list already indexed

搜索这个问题y发现主键上的索引是默认由Oracle自己生成的,Hibernate并不知道这种行为,事实是hibernate首先创建表Invoice,所以Oracle自动创建一个名为sysXXX的索引(例如:SYS_C0011010) for tha on table Invoice。 在创建所有表之后,Hibernate开始创建索引,然后Oracle为
会抛出错误 复制相同列ID的索引

有没有办法改变这种行为,以便在Hibernate的同一个SQL语句中创建索引和表?任何一个小问题?

谢谢!

0 个答案:

没有答案