chz*_*gla 3 enums spring hibernate
我有一个映射到它@Entity的@Enumerated字段:
@Entity
@Table
public class Device implements Serializable {
@Id
@GeneratedValue
private Long id;
@Enumerated(EnumType.STRING)
private DeviceType typeOfDevice;
[....]
}
Run Code Online (Sandbox Code Playgroud)
DeviceType 是典型的java 5枚举:
public enum DeviceType {
MOBILE(true), EMAIL(false);
private final boolean fubar;
private DeviceType(boolean fubar) {
this.fubar= fubar;
}
public boolean isFubar() {
return fubar;
}
}
Run Code Online (Sandbox Code Playgroud)
我如何查询Device具有typeOfDevice.isFubar() == true哪些实体?
return factory.getCurrentSession().createCriteria(Device.class).
add(Restrictions.eq("typeOfDevice.isFubar", true)).list();
Run Code Online (Sandbox Code Playgroud)
是不是做这个工作:
return factory.getCurrentSession().createCriteria(Device.class).
createCriteria("typeOfDevice").add(Restrictions.eq("fubar", true)).list();
Run Code Online (Sandbox Code Playgroud)
似乎您的问题的解决方案可能是:
Criteria criteria = factory.getCurrentSession().createCriteria(Device.class);
Disjunction or = Restrictions.disjunction();
for (DeviceType type : DeviceType.values()) {
if (type.isFubar()) {
or.add(Restrictions.eq("typeOfDevice", type));
}
}
criteria.add(or);
return criteria;
Run Code Online (Sandbox Code Playgroud)
where typeOfDevice.fubar = true我们没有做,而是更接近于where (typeOfDevice = Mobile OR typeOfDevice = OtherFubar OR typeOfDevice = OtherOtherFubar)。我意识到这不是您最初拍摄的单线,但我认为它回答了所问的问题。
你已经把它作为
@Enumerated(EnumType.STRING)
Run Code Online (Sandbox Code Playgroud)
这将存储枚举的名称.您的db列将具有"MOBILE"或"EMAIL",但不具有"true"或"false".您可以将查询更改为
return factory.getCurrentSession().createCriteria(Device.class).
add(Restrictions.eq("typeOfDevice", DeviceType.MOBILE)).list();
Run Code Online (Sandbox Code Playgroud)
它更可靠的不是?
| 归档时间: |
|
| 查看次数: |
10934 次 |
| 最近记录: |