2016-11-23 188 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類中一個相對容易的覆蓋。

相關問題