【问题标题】:Create a query for database in Hiberante , which is not a entity在 Hibernate 中为不是实体的数据库创建查询
【发布时间】:2014-04-16 14:18:19
【问题描述】:

我是HIBERNATE 的新手。我正在JSF & Hibernate 中创建一个网络应用程序。如果我的数据库中有一个表,而我的应用程序中没有任何对应的 java 类,我可以使用Hibernate 来触发对此类数据库的查询吗?

【问题讨论】:

    标签: database hibernate entity


    【解决方案1】:

    您还可以使用 org.hibernate.transform.ResultTransformer 接口将您获取的对象转换为 POJO

    public class MyResultTransformer implements ResultTransformer {
    
    @Override
    public List<Employee> transformList(List arg0) {
        List<Employee> employees = new ArrayList<Employee>();
        for (Object employee : arg0) {
            employees.add((Employee) employee);
        }
        return employees;
    }
    
    @Override
    public Employee transformTuple(Object[] arg0, String[] arg1) {
        System.out.println("MyResultTransformer.transformTuple()");
        Employee tempEmp = new Employee();
        tempEmp.setEmployee_id((BigInteger) arg0[0]);
        return tempEmp;
    }
    

    }

    POJO

    public class Employee {
    
    private BigInteger employee_id;
    
    public BigInteger getEmployee_id() {
        return employee_id;
    }
    
    public void setEmployee_id(BigInteger employee_id) {
        this.employee_id = employee_id;
    }
    

    }

      Query query=session.createSQLQuery("SELECT * FROM employeedetail");
         query.setResultTransformer(new MyResultTransformer());
         List<Employee> employees=query.list();
         for (Employee employee : employees) {
             System.out.println(employee.getEmployee_id());
        }
    

    这是我找到的解决您问题的最佳方法。

    【讨论】:

      【解决方案2】:

      你可以创建 SQL 查询,而不是使用 HQL

      Configuration configuration = new Configuration();
              configuration.configure();
           SessionFactory sessionFactory = configuration.buildSessionFactory();
           Session session=sessionFactory.openSession();
           List<Object[]> lists=session.createSQLQuery("SELECT * FROM employee ").list();
           for (Object[] employee : lists) {
              System.out.println(employee[0]+"  "+employee[1]);
          }
      

      这将为您提供一个对象数组列表。您可以使用此数组来获取查询的值。

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-04
        • 2016-08-04
        • 2013-05-14
        • 2022-11-23
        • 1970-01-01
        • 1970-01-01
        • 2017-07-31
        相关资源
        最近更新 更多