spring data jpa @Query with enum type not returning data
You're using a native query instead of a JPQL query, which would use the mappings defined in your entity to use the appropriate types and bind the enums correctly. Replace your query with a JPQL query:
@Query("select inspector FROM Inspector inspector where inspector.state in :stateList")
Comments
-
Akshay almost 2 years
Here goes. Logs show no records returned.
14:10:01.331 TRACE JdbcCoordinatorImpl - Registering statement [SELECT inspector.* FROM inspector inspector WHERE inspector.mailState IN (?, ?)] 14:10:01.331 TRACE JdbcCoordinatorImpl - Registering last query statement [SELECT inspector.* FROM inspector inspector WHERE inspector.mailState IN (?, ?)] 14:10:01.331 DEBUG Loader - bindNamedParameters() UNREAD -> stateList_0_ [1] 14:10:01.332 TRACE BasicBinder - binding parameter [1] as [VARBINARY] - [UNREAD] 14:10:01.336 TRACE SerializationHelper - Starting serialization of object [UNREAD] 14:10:01.336 DEBUG Loader - bindNamedParameters() BLOCK_FAILURE -> stateList_1_ [2] 14:10:01.337 TRACE BasicBinder - binding parameter [2] as [VARBINARY] - [BLOCK_FAILURE] 14:10:01.337 TRACE SerializationHelper - Starting serialization of object [BLOCK_FAILURE] 14:10:01.337 TRACE Loader - Bound [3] parameters total 14:10:01.338 TRACE JdbcCoordinatorImpl - Registering result set [com.mysql.jdbc.JDBC4ResultSet@41f0527f] 14:10:01.338 TRACE Loader - Processing result set 14:10:01.338 TRACE Loader - Done processing result set (0 rows) 14:10:01.338 TRACE Loader - Total objects hydrated: 0
Table definitely has a record with 'UNREAD' in the mailState column. JpaRepository using spring data jpa has the following code
@Query(value = "SELECT inspector.* FROM inspector inspector WHERE inspector.mailState IN :stateList", nativeQuery = true) List<Inspector> findAllByState(@Param("stateList") List<MailState> stateList);
My Inspector class is as such
@Entity @Table(name = "inspector") public class Inspector { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; @Enumerated(EnumType.STRING) @Column(name = "mailState") private MailState state; //...getters and setters etc... public enum MailState { UNREAD("Unread"), BLOCK_SUCCESS("Block Success"), BLOCK_FAILURE("Block Failure"); private final String value; MailState(String v) { value = v; } public String value() { return value; } public static MailState fromValue(String v) { for (MailState c: MailState.values()) { if (c.value.equals(v)) { return c; } } throw new IllegalArgumentException(v); } } }
Why is this returning no records when I can clearly see a record and hibernate loads up the enums for the query. Any ideas?