Java 不推荐的createCriteria替代方案
我正在开发一个hibernate应用程序。看起来我正在使用比新的5.2版本旧的hibernate版本 在我的maven更新之后,我发现我的查询都被弃用了…:-( 在我之前:Java 不推荐的createCriteria替代方案,java,hibernate,Java,Hibernate,我正在开发一个hibernate应用程序。看起来我正在使用比新的5.2版本旧的hibernate版本 在我的maven更新之后,我发现我的查询都被弃用了…:-( 在我之前: public static <T> List<T> getOnly(Class<T> typeClass, String column, String value) throws DatabaseException { return getSession().createCrit
public static <T> List<T> getOnly(Class<T> typeClass, String column, String value) throws DatabaseException {
return getSession().createCriteria(typeClass).add(Restrictions.eq(column, value)).list();
}
publicstaticlist getOnly(类typeClass、字符串列、字符串值)引发DatabaseException{
return getSession().createCriteria(typeClass).add(Restrictions.eq(column,value)).list();
}
这是非常简单和明确的
现在我有:
public static <T> List<T> getOnly(Class<T> typeClass, String column, String value) throws DatabaseException {
CriteriaBuilder cb = getSession().getCriteriaBuilder();
CriteriaQuery<T> query = cb.createQuery(typeClass);
Root<T> root = query.from(typeClass);
Path<Set<String>> nicknames = root.get(column);
query.select(root).where(cb.isMember(value, nicknames));
return getSession().createQuery(query).getResultList();
}
publicstaticlist getOnly(类typeClass、字符串列、字符串值)引发DatabaseException{
CriteriaBuilder cb=getSession().getCriteriaBuilder();
CriteriaQuery=cb.createQuery(typeClass);
Root=query.from(类型类);
路径昵称=root.get(列);
query.select(root.where(cb.isMember(value,昵称));
返回getSession().createQuery(query).getResultList();
}
看起来没那么简单
不管怎样,这是正确的吗?有没有更简短、更“性感”的解决方案?
注意:我需要保持方法的通用性
其他例子:
从typeClass中选择*
是:
publicstaticlist getAll(Class-typeClass)抛出DatabaseException{
返回getSession().createCriteria(typeClass).list();
}
现在是:
public static <T> List<T> getAll(Class<T> typeClass) throws DatabaseException {
CriteriaQuery<T> query = getSession().getCriteriaBuilder().createQuery(typeClass);
return getSession().createQuery(query).getResultList();
}
publicstaticlist getAll(Class-typeClass)抛出DatabaseException{
CriteriaQuery query=getSession().getCriteriaBuilder().createQuery(类型类);
返回getSession().createQuery(query).getResultList();
}
public static <T> List<T> getAll(Class<T> typeClass) throws DatabaseException {
CriteriaQuery<T> query = getSession().getCriteriaBuilder().createQuery(typeClass);
return getSession().createQuery(query).getResultList();
}