java - 在 mysql 表 hibernate 中的枚举列上执行条件查询时出错

标签 java mysql hibernate enums criteria

这是代码:

Session session = sessionFactory.getCurrentSession();
Criteria criteria = session.createCriteria(Contact.class)
    .add(Restrictions.like("gender", "male", MatchMode.ANYWHERE)));
List<Object[]> contactList = criteria.list();

其中性别是 Contact.java 中的枚举类型列

@Entity
@Table(name = "contact_master")
public class Contact {

      public enum Gender {
           MALE,FEMALE
      }

      @Column(name = "gender")
      @Enumerated(EnumType.STRING)
      private Gender gender;

      public Gender getGender() {
         return gender;
      }

      public void setGender(Gender gender) {
          this.gender = gender;
      }

}

当我运行上面的代码时,出现如下异常:

java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Enum

最佳答案

您可以定义另一个映射到同一列的 String 类型的不可插入和不可更新的字段:

@Entity
@Table(name = "contact_master")
public class Contact {

      public enum Gender {
           MALE,FEMALE
      }

      @Column(name = "gender")
      @Enumerated(EnumType.STRING)
      private Gender gender;

      @Column(name = "gender", insertable = false, updatable = false)
      private String genderAsText;

      public Gender getGender() {
         return gender;
      }

      public void setGender(Gender gender) {
          this.gender = gender;
      }
}

您不需要它的 getter 和 setter,您只能在需要将 gender 视为纯文本的查询中使用它:

Criteria criteria = session.createCriteria(Contact.class)
    .add(Restrictions.ilike("genderAsText", "male", MatchMode.ANYWHERE)));

请注意,我还使用了 Restrictions.ilike 方法,因为您可能希望比较不区分大小写。

关于java - 在 mysql 表 hibernate 中的枚举列上执行条件查询时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39267362/

相关文章:

mysql - 固定长度列最有效的数据类型

java - Hibernate Search 或 Compass

java - 如何在测试时排除依赖于另一个项目的项目的 spring 上下文

java - Azure 函数、azureFunctionsPackage 任务因 java.lang.NullPointerException 失败

php - 从当前 php 刷新另一个页面

spring - ReactiveCrudRepository 在 spring 中使用 Hibernate

mysql - Tomcat 8、HikariCP、Hibernate 和 MySQL

java - 无法读取程序中的 Java 文件

运行 jUnit 时出现 java.lang.NoClassDefFoundError : com. ibm.ejs.ras.hpel.HpelHelper

mysql - 使用一个 SQL 表 wp_posts 和 wp_postmeta 进行多站点 WordPress