raj*_*esh 6 java mysql enums hibernate criteria
这是代码:
Session session = sessionFactory.getCurrentSession();
Criteria criteria = session.createCriteria(Contact.class)
.add(Restrictions.like("gender", "male", MatchMode.ANYWHERE)));
List<Object[]> contactList = criteria.list();
Run Code Online (Sandbox Code Playgroud)
性别是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;
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行上面的代码我得到例外,如:
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Enum
Run Code Online (Sandbox Code Playgroud)
您可以定义另一个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;
}
}
Run Code Online (Sandbox Code Playgroud)
您不需要getter和setter,只能在需要将其gender视为纯文本的查询中使用它:
Criteria criteria = session.createCriteria(Contact.class)
.add(Restrictions.ilike("genderAsText", "male", MatchMode.ANYWHERE)));
Run Code Online (Sandbox Code Playgroud)
请注意,我也使用Restrictions.ilike方法,因为您可能希望比较不区分大小写.
| 归档时间: |
|
| 查看次数: |
1153 次 |
| 最近记录: |