2016-11-23 184 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> { 
    ... 
} 

所以,最终,我们所有的主键都长。然而,当我试图启动一个域对象的过程实例,我得到这个错误:

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

查看源代码,唯一支持的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类中一个相对容易的覆盖。

相关问题