我的工具 -> 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 (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
搜索这个问题发现主键上的索引是Oracle自己默认生成的,Hibernate不知道这个行为,其实是hibernate先创建表Invoice,所以Oracle自动为id on创建了一个叫sysXXX的索引(例如:SYS_C0011010)那个表发票。创建所有表后,Hibernate 开始创建索引,然后 Oracle 抛出一个错误,用于
在同一列 ID 上复制索引
有没有办法改变这种行为以通过 Hibernate 在同一 SQL 语句中创建索引和表?..任何解决方法?
谢谢!