В JPA 2.0 мы можем использовать EntityManager.CreatEnativeQuery () для выполнения собственных операторов SQL. Но когда наш результат запроса не имеет соответствующего класса объектов, Query.getResultist () возвращает список <object []>. То есть данные каждой строки возвращаются как массив объектов.
Общее использование таково:
public void testnativeQuery () {Query Query = EntityManager.CreatEnativeQuery («Выберите идентификатор, имя, возраст от t_user»); List Rows = Query.getResultist (); for (Object Row: Rows) {Object [] cells = (Object []) row; System.out.println ("id =" + cells [0]); System.out.println ("name =" + cells [1]); System.out.println ("age =" + клетки [2]); }}Таким образом, это сделает код очень трудным для понимания. Что именно является элементом с индексом 0? Неизвестно, если вы не считаете оператор запроса. Более того, после того, как оператор запроса будет скорректирован, код Java также должен быть скорректирован вместе. В настоящее время мы думаем, что если карта будет возвращена, будет намного яснее использовать.
К сожалению, API JPA не предоставляет такую обстановку. Фактически, многие базовые реализации JPA поддерживают возвращающие объекты карты.
Например:
Eclipselink's Query.sethint (QueryHints.Result_type, refultype.map); Hibernate .setresulttransformer (transformers.alias_to_entity_map);
Итак, если мы хотим вернуть карту и определить, что базовый уровень использует определенную реализацию JPA, мы можем сделать следующий шаг и пожертвовать функциями перекрестного внедрения, чтобы удовлетворить наши потребности:
public void testnativeQuery () {Query Query = EntityManager.CreatEnativeQuery («Выберите идентификатор, имя, возраст от t_user»); Query.unwrap (sqlquery.class) .setresulttransformer (transformers.alias_to_entity_map); List Rows = Query.getResultist (); for (Object obj: Rows) {map row = (map) obj; System.out.println ("id =" + row.get ("id")); System.out.println ("name =" + row.get ("name")); System.out.println ("age =" + row.get ("age")); }}Запрос возвращает метод написания указанного типа возврата объекта
Query Query = EntityManager.CreatEnativeQuery («Выберите идентификатор, имя, возраст от t_user», user.class);
Здесь следует отметить, что использование карты определенно менее эффективно, чем использование массивов объектов. Таким образом, вы должны посмотреть, находится ли снижение производительности в приемлемого диапазона. Затем в моей среде Hibernate 4.2.x, независимо от того, пишете ли вы заглавные буквы или строчные буквы в своем родном SQL, возвращаемые имена поля заглавляются. Конечно, вы можете обработать имена поля определенным образом, настраивая результат, и даже вернет нужный Pojo.
Приведенный выше метод, позволяющий дать объект returbe Interface Query Query Query Interface. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.