Activiti JPA支持(activiti-spring-boot-starter-jpa)无法检测通用主键类型

时间:2016-11-23 13:02:00

标签: spring spring-boot activiti

我正在开发一个项目,我们的JPA实体继承了 org.springframework.data.jpa.domain.AbstractPersistable ,如下所示:

@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-spring-boot-starter-jpa将不起作用?

1 个答案:

答案 0 :(得分:0)

查看源代码,唯一支持的ID类型是基元。 代码中有一条注释:

<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类中是一个相对容易的覆盖。