Как выбрать несколько столбцов с тем же именем, используя собственный запрос JPA?
У меня возникли некоторые проблемы при выборе некоторых данных с помощью SQL native query через JPA. Это потому что у меня есть 3 столбца с тем же именем, "descricao".
когда я выполняю операцию select через createNativeQuery метод EntityManager interface первое найденное значение столбца переопределяет другие.
(напр. значение первого столбца descricao данной записи - "foo", второго " bar " и третьего "foobar", когда я получаю этот результат в массиве объектов (потому что я не ORM сопоставил объекты), где должны быть заполнены заданные второе и третье значения столбца descricao заполняются значением первого)
Я совершенно уверен, что это потому, что я использовал JPA после выбора непосредственно в базе данных, возвращаю все правильно.
среда:
MySQL5; EJB 3.0 в; В JPA 1.0; С JBoss 5.0.0 га; версия JDK 1.6;
SQL запрос:
"select p.id, p.datapedido, b.descricao, prd.descricao, s.nome,
usuario.email, cc.chave_cupom, prd.nome,
ca.descricao, i.produto_id, i.valoritem,
hc.valor_utilizado, tp.datapagamento
..."
4 ответов
скалярные сопоставления столбцов в Entity Bean:
@SqlResultSetMapping(
name="DescricaoColumnAlias",
columns={@ColumnResult(name="B_DESCRICAO"),
@ColumnResult(name="CA_DESCRICAO"),
@ColumnResult(name="PRD_DESCRICAO")}
)
теперь используется псевдоним для столбцов в собственном запросе, как указано в сопоставлениях столбцов.
" выберите p.id, p.datapedido, b.descricao как B_DESCRICAO, prd.descricao как PRD_DESCRICAO, С. Ноум, пользователь.электронной почты, чч.chave_cupom, prd.ном, Калифорния.descricao как CA_DESCRICAO, i.produto_id, i.valoritem, hc.valor_utilizado, tp.датапагаменто..."
создание собственного запроса путем указания resultSetMapping & запрос.
entityManager.createNativeQuery(queryString, "DescricaoColumnAlias");
Я думаю, вы должны использовать SqlResultSetMapping чтобы указать, как столбцы сопоставляются со свойствами объектов.
вы можете найти эту вики-страницу проекта Eclipselink (JPA reference implementation) полезной:http://en.wikibooks.org/wiki/Java_Persistence/Querying#Result_Set_Mapping
Я не использовать JPA, так что игнор, если от марки, но если объекты не отображаются, то почему вы не псевдоним поля в запрос и получите доступ к результирующему набору соответственно?
select b.descricao AS d1, prd.descricao as d2, ca.descricao as d3...
@Transactional(readOnly = true)
@SuppressWarnings("unchecked")
@Column(name = "status")
public List<Student> findStudentByStatus(String status) {
System.out
.println("call findStudentMethd******************with this pattern"
+ status
+ "*********************************************");
return em.createQuery(
"select attendence from Attendence attendence where attendence.status like '"
+ p
+ A
+ L
+ "'")
.getResultList();
}