Использование Spring Hibernate getHibernateTemplate (). Найти, чтобы выбрать столбцы - PullRequest
2 голосов
/ 04 марта 2011

Я использую

List<USERS> user =
    getHibernateTemplate().find("select uid, username,email from USERS");

для получения трех значений столбцов от пользователя TABLE. Но я не могу получить доступ к отдельному значению столбца, используя объект «пользователь», потому что тип «пользователь» является типом объекта, и я не могу привести его к типу «ПОЛЬЗОВАТЕЛИ». Есть ли способы использовать «пользовательский» объект и получить доступ к значению отдельных столбцов?

Ответы [ 8 ]

3 голосов
/ 04 марта 2011

Почему вы просто запрашиваете выбранные столбцы - просто получите всю строку (и).Дайте мне знать, если это поможет.

2 голосов
/ 28 ноября 2014
@Override
public Object findByNo(Object id) throws Exception {
    List list = getHibernateTemplate().find(
            "select book from Book book " +
                    "where book.id=?",id);
    if (list.size() != 0) {
        return list.get(0);
    } else {
        return new Book();
    }
}
1 голос
/ 12 марта 2013

Имейте в виду, что ...

getHibernateTemplate.find() метод возвращает Список основанных на переданном объекте.

Затем после этого вы должны взять Список пользователей, затем вы должны отделитьвесь полученный объект и после того, как указан объект, вы можете получить доступ к его атрибуту.

Это очень просто ..

Если у вас есть запрос, то скажите мне

Я попробую мойлучший.

1 голос
/ 04 марта 2011

Спасибо Nilesh и Sean за ваши предложения.Я всегда имею дело с объектами вместо отдельных столбцов.Но это конкретное приложение работает с другими таблицами из другого приложения, которое не написано на Java (поэтому я использую таблицу USERS, а не «Пользователь», потому что она уже создана другим приложением) и не использует спящий режим.Я создал класс USERS, который реализует UserDetails и имеет гораздо меньше столбцов, чем исходная таблица USERS приложения.Когда я получаю весь объект, я получаю ошибку форматирования, поэтому я попытался использовать выбранные столбцы вместо объекта. Как-то я написал этот код и смог получить отдельные столбцы:

List user= 
            getHibernateTemplate().find("select uid, username,email from USERS where uid<>0 AND obj_type=1");


        List<USERS> l = new ArrayList<USERS>(); 
        for (int i = 0; i < user.size(); i++) {
            USERS du = new USERS(); 
            Object[] obj = (Object[]) user.get(i);

            Integer uid = (Integer) obj[0];
            du.setUid(uid);
            String username = (String) obj[1];
            du.setUsername(username); 
            String email = (String) obj[2];
            du.setEmail(email); 
            l.add(du);
        }

Мой последний вопрос: не дороже ли получить целые столбцы (объект), чем отдельные?

1 голос
/ 04 марта 2011

Если вы выбираете только несколько столбцов, шаблон hibernate вернет список массивов объектов.

Ваш пример должен выглядеть так:

List<Object[]> userDetails =
getHibernateTemplate().find("select uid, username,email from USERS");

И вы должны знать, что первый элемент является целым числом, а второй, третий - строкой и выполняют приведение самостоятельно. Это очень подвержено ошибкам конечно.

0 голосов
/ 04 февраля 2016

Попробуйте это

List<USERS> user =(List&lt;USERS>)(List&lt;?>)
    getHibernateTemplate().find("select uid, username,email from USERS");
0 голосов
/ 19 июня 2013

вы можете попробовать что-то вроде этого:

for (TemplateAttributes templateAttributes1 : templateAttributes) {
                templateAttributes1.setTemplates(templates);
                templateAttributes1.setCreateDate(new Date());
                templateAttributes1.setCreateUser(ApplicationConstants.userName);
                templateAttributes1.setLastModified(new Timestamp(new Date().getTime()));
                templateAttributesNew.add(templateAttributes1);
            }
            templates.setTemplateAttributes(templateAttributesNew);
            templates.setUpdateDate(new Date());
            templates.setUpdateUser(ApplicationConstants.userName);
            templates.setLastModified(new Timestamp(new Date().getTime()));
            getHibernateTemplate().bulkUpdate("delete from TemplateAttributes where templateAttributePK.templates.id="+templates.getId());
            getHibernateTemplate().update(templates);
0 голосов
/ 04 марта 2011

Я предполагаю, что ваша таблица базы данных называется USERS, а класс сущностей называется User. Если это так, то вы должны сделать что-то вроде этого:

List<User> users  = getHibernateTemplate().find("from User");
for(User user: users){
    // you probably don't need the id, so I'll skip that
    String email = user.getEmail();
    String userName = user.getUserName();
    // now do something with username and email address
}

Если вы используете платформу ORM, работайте с объектами, а не со столбцами базы данных!

А по поводу именования:

Соглашения об именах Java предполагают, что имя класса находится в TitleCase (или точнее UpperCamelCase), а не UPPERCASE. Кроме того, класс, представляющий одного пользователя, должен называться User, а не Users.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...