2016-11-23 3 views
0

Я работаю над проектом, в котором наши объекты JPA наследуют org.springframework.data.jpa.domain.AbstractPersistable , который выглядит, как показано ниже:Поддержка Activiti JPA (activiti-spring-boot-starter-jpa) неспособна обнаружить общий первичный ключ типа

@MappedSuperclass 
public abstract class AbstractPersistable<PK extends Serializable> implements Persistable<PK> { 

    @Id @GeneratedValue private PK id; 

    ... 

И наши классы домена определяется следующим образом:

public class User extends AbstractPersistable<Long> { 
    ... 
} 

Таким образом, в конечном счете, все наши первичные ключи Long. Однако, когда я пытаюсь запустить экземпляр процесса с объектом домена, я получаю эту ошибку:

org.activiti.engine.ActivitiException: Error while evaluating expression: ${reviewer} 

    ... 

Caused by: org.activiti.engine.ActivitiIllegalArgumentException: Unsupported Primary key type for JPA-Entity: java.io.Serializable 

    at org.activiti.engine.impl.variable.JPAEntityMappings.createId(JPAEntityMappings.java:168) 
    at org.activiti.engine.impl.variable.JPAEntityMappings.getJPAEntity(JPAEntityMappings.java:120) 
    ... 

Так выглядит Activiti-весна-загрузка-стартер-JPA не будет работать, если классы домена наследуют от базового класса, который имеет общий первичный ключ, или я чего-то не хватает?

ответ

0

Рассматривая источник, единственными поддерживаемыми типами идентификаторов являются примитивы. Существует комментарий в коде, который идет:

<snip> 
    Class<?> type = metaData.getIdType(); 
    // According to JPA-spec all primitive types (and wrappers) are supported, String, util.Date, sql.Date, 
    // BigDecimal and BigInteger 
</snip> 

Используя общего код проходит через сериализуемый, не правильно сопрягать. Кажется, это было бы относительно легко переопределить класс JPAEntityMappings.

Смежные вопросы