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.
Réponses
Trop de publicités?
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.
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());
}
}