【问题标题】:spring data jpa @Query with enum type not returning dataspring data jpa @Query 枚举类型不返回数据
【发布时间】: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);
        }
    }
}

当我可以清楚地看到一条记录并且休眠加载查询的枚举时,为什么这不返回任何记录。有什么想法吗?

【问题讨论】:

    标签: java mysql spring hibernate jpa


    【解决方案1】:

    您使用的是本机查询而不是 JPQL 查询,这将使用您的实体中定义的映射来使用适当的类型并正确绑定枚举。用 JPQL 查询替换您的查询:

    @Query("select inspector FROM Inspector inspector where inspector.state in :stateList")
    

    【讨论】:

    • 没有 100% 工作,但你走在正确的轨道上。我只需要在您提供的 JPQL 查询中引用对象字段(状态)而不是数据库字段(邮件状态)。谢谢。您编辑后,我会立即标记为已接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 2019-07-14
    • 2018-02-26
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多