Я хочу написать общий метод, который ищет значение столбца и возвращает существующий объект или новый объект type T
. T
имеет поле данных String name
с соответствующим getName()
.Java, Hibernate - Как создать общие методы getByColumnValue()?
это не работает для объектов, которые имеют столбец имя:
static public <T> T getByName(Class<T> type, final String name) {
Session session = sessionFactory.openSession();
session.beginTransaction();
List<T> list = session.createCriteria(type).list();
session.getTransaction().commit();
session.close();
for (T entry : list) {
if (entry.getName().equals(name)) {
return entry;
}
}
return new Class<T>(name);//or return null and create object in the calling method
}
entry
должен быть приведен к конкретному классу T
, как я могу добиться этого? Есть ли лучший подход?
редактировать
Решение основано на Aaron Digulla ответ:
static public <T> T getByName(Class<T> type, final String name) {
Session session = sessionFactory.openSession();
session.beginTransaction();
Query sqlQuery = session.createQuery("from " + type.getName() + " where name = :name");
sqlQuery.setParameter("name", name);
@SuppressWarnings("unchecked")
List<T> entries = sqlQuery.list();
session.getTransaction().commit();
session.close();
if (entries.size() == 1) {
return entries.get(0);
}
return null;
}
спасибо, но я думаю, что это должно быть 'q.setParameter (" name ", name)'. – Frank
@Frank: Совершенно верно. Исправлена. –