spring data jpa @Query 枚举类型不返回数据
Posted
技术标签:
【中文标题】spring data jpa @Query 枚举类型不返回数据【英文标题】:spring data jpa @Query with enum type not returning data 【发布时间】:2014-02-26 12:35:53 【问题描述】:来了。日志显示没有返回任何记录。
14:10:01.331 TRACE JdbcCoordinatorImpl - 注册语句 [SELECT inspector.* FROM inspector inspector WHERE inspector.mailState IN (?, ?)] 14:10:01.331 TRACE JdbcCoordinatorImpl - 注册最后一个查询语句 [SELECT inspector.* FROM inspector inspector WHERE inspector.mailState IN (?, ?)] 14:10:01.331 调试加载程序-bindNamedParameters() 未读-> stateList_0_ [1] 14:10:01.332 TRACE BasicBinder - 绑定参数 [1] 作为 [VARBINARY] - [未读] 14:10:01.336 TRACE SerializationHelper - 开始序列化对象 [未读] 14:10:01.336 调试加载器 - bindNamedParameters() BLOCK_FAILURE -> stateList_1_ [2] 14:10:01.337 TRACE BasicBinder - 绑定参数 [2] 作为 [VARBINARY] - [BLOCK_FAILURE] 14:10:01.337 TRACE SerializationHelper - 开始序列化对象 [BLOCK_FAILURE] 14:10:01.337 TRACE 加载程序 - 绑定 [3] 参数总计 14:10:01.338 TRACE JdbcCoordinatorImpl - 注册结果集 [com.mysql.jdbc.JDBC4ResultSet@41f0527f] 14:10:01.338 TRACE Loader - 处理结果集 14:10:01.338 TRACE Loader - 完成处理结果集(0 行) 14:10:01.338 TRACE Loader - 水合物体总数:0
表的mailState 列中肯定有一条记录为'UNREAD'。使用spring data jpa的JpaRepository有如下代码
@Query(value = "SELECT inspector.* FROM inspector inspector WHERE inspector.mailState IN :stateList", nativeQuery = true)
List<Inspector> findAllByState(@Param("stateList") List<MailState> stateList);
我的 Inspector 类就是这样
@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);
当我可以清楚地看到一条记录并且休眠加载查询的枚举时,为什么这不返回任何记录。有什么想法吗?
【问题讨论】:
【参考方案1】:您使用的是本机查询而不是 JPQL 查询,这将使用您的实体中定义的映射来使用适当的类型并正确绑定枚举。用 JPQL 查询替换您的查询:
@Query("select inspector FROM Inspector inspector where inspector.state in :stateList")
【讨论】:
没有 100% 工作,但你走在正确的轨道上。我只需要在您提供的 JPQL 查询中引用对象字段(状态)而不是数据库字段(邮件状态)。谢谢。您编辑后,我会立即标记为已接受。以上是关于spring data jpa @Query 枚举类型不返回数据的主要内容,如果未能解决你的问题,请参考以下文章