2013-04-03 48 views
3

我收到錯誤Exception in thread "main" org.springframework.dao.InvalidDataAccessApiUsageException: Parameter value [1] did not match expected type [java.lang.Boolean]; nested exception is java.lang.IllegalArgumentException: Parameter value [1] did not match expected type [java.lang.Boolean]參數值[1]與預期類型不匹配[java.lang.Boolean]

我很困惑,因爲它來自下面顯示的服務方法,它被註釋掉了。當我發表評論時,可以避免錯誤。 active列是TINYINT(1),即10

實體:

@Entity 
@NamedQueries({ 
     @NamedQuery(name="Workflow.findByUUID", query="SELECT w FROM Workflow w WHERE w.uuid = :uuid"), 
     @NamedQuery(name="Workflow.findByActive", query="SELECT w FROM Workflow w WHERE w.active = :active ORDER BY id ASC") 
}) 

我的倉庫:

@Repository 
public interface WorkflowRepository extends JpaRepository<Workflow, Integer> { 
    List<Workflow> findByActive(@Param("active") Integer active); 
} 

我的服務:

@Service 
public class WorkflowService { 

    @Autowired 
    WorkflowRepository workflowRepository; 

    /** 
    * Get active workflows 
    */ 
    @Transactional(readOnly = true) 
    public List<Workflow> findActive() { 
     //return workflowRepository.findByActive(1); 
     return null; 
    } 

當我取消

+0

就JPA實體而言,參數是布爾值。這個問題用'hql' :-)標記,java中沒有tinyints。我認爲'@ NamedQueries'是java持久化語言。 –

回答

10

你似乎有映射Workflow.active屬性作爲Boolean。所以,你版本庫應該是這樣的:

@Repository 
public interface WorkflowRepository extends JpaRepository<Workflow, Boolean> { 
    List<Workflow> findByActive(@Param("active") Boolean active); 
} 

和呼叫workflowRepository.findByActive(true)應該表現你怎麼想它。

事實上,HQL有時會在數據庫和Java映射之間產生類型差異,因爲在這些環境中鍵入不同。因此請檢查您的Entityactive類型,以制定相應的Repository

+0

blint,@Param(「active」)註釋的目的是什麼? –

+0

@AlexanderSuraphel'@Param'允許您在目標查詢中配置參數的名稱。 – blint

+0

我認爲這不是必需的。我正在做......像http://stackoverflow.com/a/35179837/1242842。 –

相關問題