由于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应用相同的命名策略吗?
答案 0 :(得分:1)
您需要使用@JoinColumn
:
@ManyToOne
@JoinColumn(name = "attached_by_id")
private UserImpl attachedBy;
您还需要更新@Index
:
@Index(name = "IDX_Attachment_Id", columnList="attached_by_id"