Как применить ту же стратегию именования к @index columnList, что и для column? - PullRequest
0 голосов
/ 07 ноября 2018

Поскольку в одну из более новых версий 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;

   ...
}

attachBy_id столбец из индекса columnList с именем attach_by_id в базе данных. Hibernate не может распознать правильное имя физического столбца и выдает исключение:

org.hibernate.AnnotationException: Невозможно создать ограничение уникального ключа (attachBy_id) для вложения таблицы: столбец базы данных «attachBy_id» не найден. Убедитесь, что вы используете правильное имя столбца, которое зависит от используемой стратегии именования (оно может не совпадать с именем свойства в сущности, особенно для реляционных типов)

Я не могу изменить код JBPM. Я также не хочу менять имя столбца в базе данных (в любом случае это не помогает), но мне нужно сопоставить attachBy_id с @Index columnList на attach_by_id в некоторых путь. Можно ли применить ту же стратегию именования для индекса columnList?

1 Ответ

0 голосов
/ 08 ноября 2018

Вам нужно использовать @JoinColumn:

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

И вам нужно обновить @Index:

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