我正在开发一个项目,我们的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将不起作用?
答案 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类中是一个相对容易的覆盖。