博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate 执行SQL时设置枚举参数
阅读量:6195 次
发布时间:2019-06-21

本文共 1925 字,大约阅读时间需要 6 分钟。

hot3.png

Hibernate 执行SQL时设置枚举参数

有如下一个枚举,

package com.lyx;/** * Created by liyanxin on 2014/12/24. */public enum Gender {    MAIL("男性"),    FMAIL("女性"),    UNSPECIFIED("未知");    private String value;    private Gender(String value) {        this.value = value;    }//    @Override//    public String toString() {//        return this.value;//    }}

 

注意toString 方法已经注释掉了。

System.out.println(gender.toString());  //FMAIL

System.out.println(gender.name());     //FMAIL

System.out.println(gender.ordinal());  //1

这里toString方法调用的是 枚举父类 Enum 的toString方法,直接返回name属性值。 

如果把 toString 方法的注释去掉,那么返回就是 value 值。。。

把 toString 注释去掉的一个在hibernate中的例子 如下,

实体类如下,

@Entity@Table(name = "tb_user")public class User implements Serializable {    @Id    @GeneratedValue(strategy = GenerationType.IDENTITY)    private Integer id;    private String name;    private int age;    @ManyToOne    @JoinColumn(name = "role_id", unique = false, nullable = false)    private Role role;    private Gender gender;    ..............}

 

你应该知道 Gender 枚举字段在数据库中,hibernate 默认映射为 int 类型的字段。看这里

有这么一个sql 查询,

public List
 getUserByGender0(Gender gender) {    System.out.println(gender.toString());    System.out.println(gender.name());    System.out.println(gender.ordinal());    Session session = this.getCurrentSession();    String sql = "select * from tb_user where gender = :gender";    return session.createSQLQuery(sql).addEntity(User.class)        .setParameter("gender", gender).list();}

 

设置一个枚举类型的参数,那么实际上 hibernate 在设置 gender 参数的时候,这个参数的值是 toString 的返回值,即枚举的name 属性值,FMAIL。明显就会查不出数据来。

而如果覆写了toString 方法,这里返回的value值,也会查不出数据来。

所以应该写成这样,setParameter("gender", gender.ordinal())

String sql = "select * from tb_user where gender = :gender";return session.createSQLQuery(sql).addEntity(User.class)    .setParameter("gender", gender.ordinal()).list();

而在hibernate执行hql查询时,则没有这些弯弯绕,以上就可以忽略。

这是我遇到的一个坑。

=========END=========

转载于:https://my.oschina.net/xinxingegeya/blog/480146

你可能感兴趣的文章
成长型企业需要什么样的光纤存储
查看>>
直击Dell World 2014: 戴尔现在挺好的
查看>>
第7章 性能和可靠性模式 Server Clustering(服务器群集)
查看>>
1.Python的类方法和静态方法
查看>>
Qt数据库总结
查看>>
fedora20 安装nvidia独立显卡驱动
查看>>
FileInPutStream转换成byte数组
查看>>
EF 查看生成的SQL语句
查看>>
创建GitHub(注册、创建仓库)
查看>>
zabbix使用企业微信发送告警信息
查看>>
XHTML学习资料(二)
查看>>
未解之题(个人用)
查看>>
面向对象1
查看>>
Css float 盒子模型 position
查看>>
局部变量表
查看>>
Marker
查看>>
CSS3 动画-- 鼠标移上去,div 会旋转、放大、移动
查看>>
python爬虫知识点总结(四)Requests库的基本使用
查看>>
51nod 1831 小C的游戏(博弈论+打表)
查看>>
51nod挑的部分5级题
查看>>