2013-10-18 3 views
2

데이터 액세스 객체를 테스트하기 위해 메모리에서 hsqldb를 사용하여 JUnit 테스트를 실행합니다.HSQLDB : count (*)는 십진수를 반환합니다.

final Query query = entityManager.createNativeQuery("SELECT COUNT(*) FROM AAA"); 
return (Integer) query.getSingleResult() == 0; 

return 문이 내게 있는지 확인하자 :

SELECT COUNT(*) FROM AAA 

코드는 다음과 같습니다 DAO를에서

, 나는 다음과 같은 네이티브 SQL 쿼리를 실행하려면 JPA 엔티티 관리자를 사용하여 0과 동일한 개수가 있습니다. 프로덕션 환경에서 정상적으로 작동합니다 (DB2가 사용됨).

그러나 메모리에 hsqldb가있는 테스트 환경에서는 쿼리가 정수 또는 int를 반환하지 않지만 BigDecimal (캐스팅이 실패 함)을 반환하기 때문에 실패합니다.

HsqlDB 2.3.0이 사용됩니다. 1.8 버전의 hsqldb에서 제대로 작동했습니다.

이 문제의 원인을 알고 있습니까? 그리고 어떻게하면 count(*)을 정수로 반환 할 수 있습니까?

가능한 한 생산 코드가 변경되지 않도록하고 싶습니다. 나는이 SQL 캐스트로이 문제를 해결할 수 있다는 것을 이미 알고 있지만,이 견해에 적합하지 않습니다 원인 :

SELECT cast(COUNT(*) as int) FROM AAA 

답변

1

당신은 플랫폼에 독립적으로 자바 코드를 변경할 수 있습니다. Number에 반환 값을 캐스팅하고 Integer를 비교하는 대신 getLong()을 사용합니다.

HSQLDB는 실제로 BigDecimal이 아닌 Long을 반환합니다.

관련 문제