JPA native 查询时枚举类型值转换 的解决办法

问题描述:

    在表A中,有一 varchar 类型的字段 f,这个字段对应于java实体中的属性类型是一个枚举E.现需要在表A中查出所有字段f包含了枚举E的某个值的记录.(字段f存的是多个用逗号隔开的枚举E的值,如:"0,0,1,0")

以下是枚举E的定义

public enum E {

Q(0),

W(1);

Integer value;

public E(Integer val){this.value = val}

}


以下是japRepositor:

public interface ERep extends JpaRepository<A,Integer> {


@Query(nativeQuery = true,value="SELECT * FROM A AS a WHERE a.f LIKE %:e%" )

List<A> findByE(@param("e") E e);

}


测试时给findByE方法赋值为E.Q,结果发现jap生成的sql语句是: SELECT * FROM A AS a WHERE a.f LIKE %Q%;

这显然不是我所期望的,我期望的结果应该是:

SELECT * FROM A AS a WHERE a.f LIKE %0%;


在google上搜索解决办法无果后,突然想到为啥会翻译成枚举值的字面值呢?我猜测,一定是spring 调用了E 的toString()方法,想到这里立马将枚举类E改为:

public enum E {

Q(0),

W(1);

Integer value;

public E(Integer val){this.value = val}

@Override

public String toString(){

        return this.value.toString();

}

}

再一测试果然就实现预想效果了.

遂在此记录一番!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,280评论 19 139
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 2,068评论 0 2
  • Scala与Java的关系 Scala与Java的关系是非常紧密的!! 因为Scala是基于Java虚拟机,也就是...
    灯火gg阅读 3,537评论 1 24
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,874评论 18 399
  • 7月11日 回家度过了短暂的4天假期,暑期的实习终于到来了,心里还是挺紧张的,对实习地点充满了无限的想象…… 7点...
    原生态孩子阅读 156评论 0 0