如何将与列相同的命名策略应用于@index columnList?

时间:2018-11-07 16:03:42

标签: hibernate-mapping jbpm

由于JBPM的较新版本之一已添加了索引内部类:

@Entity
@Table(name="Attachment",
   indexes = {@Index(name = "IDX_Attachment_Id",  
   columnList="attachedBy_id"),
              @Index(name = "IDX_Attachment_DataId", 
   columnList="TaskData_Attachments_Id")})

@SequenceGenerator(name="attachmentIdSeq", 
   sequenceName="ATTACHMENT_ID_SEQ", allocationSize=1)
public class AttachmentImpl implements InternalAttachment {
   ...

   @ManyToOne()
   private UserImpl   attachedBy;

   ...
}
数据库中名为 attached_by_id 的索引列列表中的

attachedBy_id 列。 Hibernate无法识别正确的物理列名称并引发异常:

  

org.hibernate.AnnotationException:无法在表附件上创建唯一的键约束(attachedBy_id):找不到数据库列'attachedBy_id'。确保使用正确的列名,这取决于所使用的命名策略(它可能与实体中的属性名称不同,尤其是对于关系类型而言)

我无法更改JBPM的代码。我也不想更改数据库中的列名(无论如何也无济于事),但是我需要将 attachedBy_id 从@Index columnList映射到 attached_by_id 某种程度上来说。可以对索引columnList应用相同的命名策略吗?

1 个答案:

答案 0 :(得分:1)

您需要使用@JoinColumn

@ManyToOne
@JoinColumn(name = "attached_by_id")
private UserImpl attachedBy;

您还需要更新@Index

@Index(name = "IDX_Attachment_Id", columnList="attached_by_id"