检索没有HQL的表的所有行?
我正在使用Hibernate 4,并希望简单列出表的所有行。 我find的所有解决schemebuild议使用类似“从表名”,但我想避免在string中硬编码表名。
您可以使用
session.createCriteria(MyEntity.class).list();
例如。
HQL不使用表名。 它使用实体名称。 实体名称是(默认)类名称。 所以你可以使用
String hql = "select a from " + TheEntity.class.getSimpleName() + " a";
但是,在这里,我会倾向于对types安全的可读性,并使用它
String hql = "select a from TheEntity a";
无论如何,你应该为你的查询进行自动化testing。
// Hibernate类
public class CommonDAO<T> { Session session = null; Transaction transaction = null; private Class<T> clazz; public CommonDAO(){ //constructor session = HibernateUtil.getSessionFactory().openSession(); transaction = session.beginTransaction(); Type genericSuperclass = this.getClass().getGenericSuperclass(); if (genericSuperclass instanceof ParameterizedType) { ParameterizedType pt = (ParameterizedType) genericSuperclass; Type type = pt.getActualTypeArguments()[0]; clazz = (Class<T>) type; } } public T listById(Object id) { T object = null; try { object = (T) session.get(clazz, (Serializable) id); } catch (Exception e) { e.printStackTrace(); } return object; } }
//用户类
public class UserDAO extends CommonDAO<UserMaster> { // Here UserMaster is pojo public UserDAO() { super(); } public static void main(String ar[]) { UserMaster user = new UserDAO().listById(1); // 1 is id System.out.println(user.getUserName()); } }