59 votes

Récupérer toutes les lignes d'une table sans HQL ?

J'utilise Hibernate 4 et j'aimerais simplement répertorier toutes les lignes d'un tableau. Toutes les solutions que j'ai trouvées suggèrent d'utiliser quelque chose comme "from tablename", mais j'aimerais éviter de coder en dur les noms de table dans les chaînes.

136voto

mrab Points 1011

Vous pouvez utiliser

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

par exemple.

7voto

JB Nizet Points 250258

HQL n'utilise pas les noms de table. Il utilise des noms d'entité. Et les noms d'entités sont (par défaut) des noms de classe. Vous pouvez donc utiliser

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

Mais je privilégierais la lisibilité à la sécurité de type ici, et utiliserais

 String hql = "select a from TheEntity a";

De toute façon, vous devriez avoir des tests automatisés pour vos requêtes.

-2voto

Manish Points 19

//Classe d'hibernation

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

//Classe d'utilisateur

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X