关于hibernate方法封装

岁月你莫崔 发布于 2016/06/11 21:51
阅读 292
收藏 0
我下面的方法,是想利用反射代替    Restrictions.eq(propertyName, value)这句代码,但是抛出异常


异常如下:
    java.lang.IllegalAccessException: Class utils.HibernateUtils can not access a member of class     org.hibernate.criterion.Restrictions with modifiers ""
    at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:109)
    at java.lang.Class.newInstance(Class.java:368)






private static SessionFactory factory;


// ---------------------------------------------------------------------------------
static {
        // 1.创建Configuration
        Configuration cof = new Configuration();
        // 2.加载配置文件
        cof.configure();


    factory = cof.buildSessionFactory();
}


// 获取与当前线程绑定的会话对象
public static Session getCurrentSession() {
    return factory.getCurrentSession();
}


// 使用Criteria条件查询
public static List<Object> queryConditionCurrentByCriteria(Class objClass,
String methodName, String field, String queryCondition) {
    Session session = null;
    Transaction tran = null;
    List<Object> list = null;
    try {
        //session = getCurrentSession();
        //tran = session.beginTransaction();
        ession = getSession();
        Criteria criteria = session.createCriteria(objClass);
        // 获得Restrictions类字节码
        Class<Restrictions> restrictions = (Class<Restrictions>) Class
        .forName("org.hibernate.criterion.Restrictions");
        // 获得想调用的方法
        Method method = restrictions.getMethod(methodName, String.class,
        Object.class);
        // 创建Restrictions实例
        Restrictions instance = restrictions.newInstance();

    // criteria.add(Restrictions.eq(propertyName, value))
    // 添加执行条件
     Object invoke = method.invoke(instance, field,queryCondition);
    criteria.add((Criterion)invoke);
    list = criteria.list();
    //tran.commit();
    // Restrictions.e
    } catch (Exception E) {
    E.printStackTrace();
    //tran.rollback();
} finally {
    if (session != null) {
    session.close();
}
}
return list;
}


加载中
0
李景枫
李景枫
你好楼主,反射对性能影响很大,慎重使用
岁月你莫崔
岁月你莫崔
哥们,能不能告诉我该怎么处理这个异常,我才学,我现在考虑练习技术.性能随后再说啊
返回顶部
顶部