【发布时间】:2014-04-16 14:18:19
【问题描述】:
我是HIBERNATE 的新手。我正在JSF & Hibernate 中创建一个网络应用程序。如果我的数据库中有一个表,而我的应用程序中没有任何对应的 java 类,我可以使用Hibernate 来触发对此类数据库的查询吗?
【问题讨论】:
我是HIBERNATE 的新手。我正在JSF & Hibernate 中创建一个网络应用程序。如果我的数据库中有一个表,而我的应用程序中没有任何对应的 java 类,我可以使用Hibernate 来触发对此类数据库的查询吗?
【问题讨论】:
您还可以使用 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());
}
这是我找到的解决您问题的最佳方法。
【讨论】:
你可以创建 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]);
}
这将为您提供一个对象数组列表。您可以使用此数组来获取查询的值。
希望对你有帮助。
【讨论】: