2012-01-31 24 views

Odpowiedz

130

Można użyć

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

na przykład.

+1

Jak mogę to posortować? –

+14

session.createCriteria (MyEntity.class) .addOrder (Order.asc ("age") .list(); – slonik

+5

Czy istnieje sposób na zabezpieczenie tego typu? – Hassan

7

HQL nie używa nazw tabel. Używa nazw jednostek. Nazwy encji to (domyślnie) nazwy klas. Więc można użyć

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

Ale chciałbym faworyzować czytelność nad bezpieczeństwem typu tu i używać

String hql = "select a from TheEntity a"; 

Trzeba zautomatyzowanych testów dla zapytań w każdym razie.

+0

Tak, zapytania są testowane, ale nadal swoją drugie rozwiązanie oznaczałoby, że zapytanie nie byłyby brane pod uwagę przez refaktoringu . –

+1

Tak, ale zostanie przechwycony przez test niesprawności. –

+0

Zgadzam się, że ostatecznie ważne jest, aby uzyskać prawidłowe wyniki, ale ponieważ projekt jest obecnie na wczesnym etapie, każdego tygodnia odbywa się coś w rodzaju refaktoryzacji. Tak więc prawidłowe wspieranie tego jest obecnie bardzo ważne. –

-2

// Hibernate Klasa

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

// Użytkownik Klasa

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

Nie rób takich rzeczy z sesją w konstruktorach – dikkini

+0

Korzystanie z sesji w Konstruktorów !!! wcale dobra praktyka .. – Krishna

+2

@dikkini Dlaczego tak jest? czy możesz mi to wyjaśnić? –

Powiązane problemy