[SQL] JPA 기본 쿼리를 선택하고 캐스트 객체
SQLJPA 기본 쿼리를 선택하고 캐스트 객체
나는 사용자를 확장하는 개체 관리를 가지고있다. 기본적으로 두 개체는 테이블 내 더비 데이터베이스의 USER_ (관리에서 포함 필드)에 있습니다. 일반적으로 나는이 같은 사용자를 선택할 것입니다 :
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<User> query = cb.createQuery(User.class);
Root user= query.from(User.class);
Predicate predicateId = cb.equal(category.get("id"), id);
query.select(user).where(predicateId);
return em.createQuery(query).getSingleResult();
그러나 내 쿼리의 복잡성이 같은 네이티브 쿼리를 사용하고 있습니다 때문에 :
Query query = em.createNativeQuery("SELECT USER.* FROM USER_ AS USER WHERE ID = ?");
query.setParameter(1, id);
return (User) query.getSingleResult();
이 캐스트 예외가 발생하지만. 나는이 관리자에서 어떤 필드에 기인한다 그림.
내 질문은 어떻게 (반환 것 JPQL 쿼리로) 등등 @LOB와 @ManyToOne (에 대해 동일한 값을 포함) 최초의 예로서 동일한 결과를 네이티브 쿼리를 사용하여 사용자를 선택할 수있다?
해결법
-
==============================
1.다음과 같은 방법 중 하나를 시도 할 수 있습니다 :
다음과 같은 방법 중 하나를 시도 할 수 있습니다 :
당신은 훌륭한 책 (PDF로 제공) 자바 지속성에서 자세한 내용을보실 수 있습니다.
─────── 참고 : getSingleResult ()의 사용과 관련하여, 당신은 JPA에 getSingleResult ()를 사용하지 않을해야하는 이유를 참조하십시오.
-
==============================
2.허용 대답이 올바르지 않습니다.
허용 대답이 올바르지 않습니다.
createNativeQuery는 항상 쿼리를 반환합니다 :
public Query createNativeQuery(String sqlString, Class resultClass);
쿼리에 getResultList를 호출하면 목록을 반환합니다 :
List getResultList()
할당 (또는 주조) 목록
에 때, 체크되지 않은 할당 경고가 생성됩니다. 반면, createQuery는 TypedQuery를 반환합니다 :
public <T> TypedQuery<T> createQuery(String qlString, Class<T> resultClass);
TypedQuery에 getResultList를 호출하면 목록
를 반환합니다. List<X> getResultList();
이 제대로 입력하고 경고를 제공하지 않습니다.
createNativeQuery으로 ObjectMapper를 사용하여 경고를 제거하는 유일한 방법이 될 것으로 보인다. 개인적으로, 나는 내가 걱정해야 뭔가를 라이브러리의 부족으로이 문제를보고하지, 경고를 억제하기 위해 선택합니다.
-
==============================
3.JPA를 참조하십시오 : POJO 클래스 컬렉션에 네이티브 쿼리 결과 세트를 변환하는 방법
JPA를 참조하십시오 : POJO 클래스 컬렉션에 네이티브 쿼리 결과 세트를 변환하는 방법
포스트 그레스 9.4의 경우,
List<String> list = em.createNativeQuery("select cast(row_to_json(u) as text) from myschema.USER_ u WHERE ID = ?") .setParameter(1, id).getResultList(); User map = new ObjectMapper().readValue(list.get(0), User.class);
-
==============================
4.네이티브 쿼리가 조인을 기반으로 할 때, 그 경우에 당신은 객체의 목록으로 결과를 얻을하고 처리 할 수 있습니다.
네이티브 쿼리가 조인을 기반으로 할 때, 그 경우에 당신은 객체의 목록으로 결과를 얻을하고 처리 할 수 있습니다.
간단한 예.
@Autowired EntityManager em; String nativeQuery = "select name,age from users where id=?"; Query query = em.createNativeQuery(nativeQuery); query.setParameter(1,id); List<Object[]> list = query.getResultList(); for(Object[] q1 : list){ String name = q1[0].toString(); //.. //do something more on }
-
==============================
5.
import javax.persistence.*; @Entity @Table(name = "sys_std_user") public class StdUser { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "class_id") public int classId; @Column(name = "user_name") public String userName; //getter,setter }
import com.example.demo.models.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.PersistenceUnit; import java.util.List; @RestController public class HomeController { @PersistenceUnit private EntityManagerFactory emf; @GetMapping("/") public List<StdUser> actionIndex() { EntityManager em = emf.createEntityManager(); // Without parameter List<StdUser> arr_cust = (List<StdUser>)em .createQuery("SELECT c FROM StdUser c") .getResultList(); return arr_cust; } @GetMapping("/paramter") public List actionJoin() { int id = 3; String userName = "Suresh Shrestha"; EntityManager em = emf.createEntityManager(); // With parameter List arr_cust = em .createQuery("SELECT c FROM StdUser c WHERE c.classId = :Id ANd c.userName = :UserName") .setParameter("Id",id) .setParameter("UserName",userName) .getResultList(); return arr_cust; } }
from https://stackoverflow.com/questions/17708946/jpa-native-query-select-and-cast-object by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 빌 &는 SQL 주입 - UTF8 POC (0) | 2020.06.04 |
---|---|
[SQL] 왜 SQL 서버 스칼라 반환 함수는 느린받을 수 있나요? (0) | 2020.06.04 |
[SQL] 모든 열은 'X'가 들어 SQL 서버 SELECT (0) | 2020.06.04 |
[SQL] 어떻게 PostgreSQL을 테이블에 행을 계산 속도를합니까? (0) | 2020.06.04 |
[SQL] 삽입 등) (최대 + 1 문제 설정치 (0) | 2020.06.04 |