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