спящий список параметров - PullRequest
2 голосов
/ 21 июня 2011

Мне нужно написать общую функцию, которая обрабатывает запросы.функция get List<String>, которая содержит параметры, отправленные на query.как я реализую это в hibernate.

если быть более точным, если мой запрос:

select * from people where name=:name and family=:family

мой список будет содержать

<"name","myname">
<"family","myfamily">

Ответы [ 5 ]

1 голос
/ 22 июня 2011

getHibernateTemplate () наиболее вероятно возвращает org.springframework.orm.hibernate3.HibernateTemplate, который является вспомогательным классом Hibernate в среде Spring.Это код из метода find, вызываемого в нем:

    public List find(final String queryString, final Object[] values) throws DataAccessException {
    return (List) executeWithNativeSession(new HibernateCallback() {
        public Object doInHibernate(Session session) throws HibernateException {
            Query queryObject = session.createQuery(queryString);
            prepareQuery(queryObject);
            if (values != null) {
                for (int i = 0; i < values.length; i++) {
                    queryObject.setParameter(i, values[i]);
                }
            }
            return queryObject.list();
        }
    });
}
0 голосов
/ 14 мая 2014

Вы можете использовать список параметров, чтобы включить в ваш запрос 'IN' и 'setParameterList'

List<String> yourListString = new ArrayList<String>();

Query query = getSession().createQuery("select * from people where name in (:yourListString) and family in (:yourListString)"
query.setParameterList("yourListString ", yourListString);
query.executeUpdate();
0 голосов
/ 21 июня 2011

написать запрос как:

String str="select * from people where name=? and family=?";
List<Object> queryParam=new ArrayList<Object>();
queryParam.add(name); //queryParam.add(yourList.get(0));
queryParam.add(family); //queryParam.add(yourList.get(1));
List<Object[]> List=getHibernateTemplate().find(str,queryParam.toArray());
0 голосов
/ 21 июня 2011

Если я правильно прочитал ваш вопрос, вам нужен обобщенный способ вызова запроса, который использовал именованные параметры, передавая список, содержащий пары имя / значение для привязки.

Это довольно просто.Я опускаю использование обобщений для ясности.

    String query="select p from Person p where name=:name and family=:family";
    String[] parameterArray = new String[] {"name", "myName", "family","myFamily"}; 
    List parameters = Arrays.asList(parameterArray);
    List results = callQuery(session, query, parameters);

public List callQuery(Session session, String query, List parameters) {
      Query query = session.createQuery(query);
      if (parameters != null && !parameters.isEmpty()) {
          for (int i = 0; i < parameters.size(); i+=2) {
            query.setParameter(parameters[i],parameters[i+1]);
          }
      }
      return query.list();
    }

Альтернативой является использование карты, которая делает итерацию по параметрам, чтобы добавить их в запрос немного чище;Я также нахожу, что это делает добавление их в коллекцию более понятным для передачи в общий метод:

    String query="select p from Person p where name=:name and family=:family";
    Map<String,Object> parameters = new HashMap<String,Object>();
    parameters.put("name","myName");
    parameters.put("family,"myFamily");
    List results = callQuery(session, query, parameters);

public List callQuery(Session session, String query, Map<String,Object> parameters) {
      Query query = session.createQuery(query);
      if (parameters != null && !parameters.isEmpty()) {
          for (Map.Entry<String,Object> entry : parameters) {
            query.setParameter(entry.getKey(),entry.getValue());
          }
      }
      return query.list();
    }

Я также рекомендовал бы изучить NamedQueries над использованием встроенных строк, поскольку они позволяютвключите запросы в ваше сопоставление xml / annotations и добавьте некоторую проверку синтаксиса запросов.

0 голосов
/ 21 июня 2011

Ознакомьтесь с Hibernate Criteria API

Это должно помочь вам начать.

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