Получение всех строк таблицы без HQL?
Я использую Hibernate 4 и хотел бы просто перечислить все строки в таблице. Все решения, которые я нашел, предлагают использовать что-то вроде "from tablename", но я хотел бы избежать жесткого кодирования имен таблиц в строках.
3 ответа:
HQL не использует имена таблиц. Он использует имена сущностей. А имена сущностей - это (по умолчанию) имена классов. Так что вы можете использовать
String hql = "select a from " + TheEntity.class.getSimpleName() + " a";
но я бы предпочел читаемость над безопасностью типа здесь, и использовать
String hql = "select a from TheEntity a";
вы должны иметь автоматические тесты для запроса в любом случае.
/ / 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()); } }