在没有HQL的情况下检索表的所有行?

时间:2012-01-31 17:32:29

标签: hibernate

我正在使用Hibernate 4,并希望简单地列出表的所有行。我发现的所有解决方案建议使用“from tablename”之类的东西,但我想避免在字符串中硬编码表名。

3 个答案:

答案 0 :(得分:135)

您可以使用

session.createCriteria(MyEntity.class).list();

例如。

答案 1 :(得分:7)

HQL不使用表名。它使用实体名称。实体名称(默认情况下)是类名。所以你可以使用

String hql = "select a from " + TheEntity.class.getSimpleName() + " a";

但我赞成可读性优于类型安全,并使用

String hql = "select a from TheEntity a";

无论如何,您应该对查询进行自动化测试。

答案 2 :(得分:-2)

// Hibernate Class

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());
 }
}