use of entityManager.createNativeQuery(query,foo.class)

后端 未结 5 663
-上瘾入骨i
-上瘾入骨i 2020-12-01 07:49

I would like to return a List of Integers from a

javax.persistence.EntityManager.createNativeQuery call

Why is the following incorrect?

5条回答
  •  感情败类
    2020-12-01 08:11

    Suppose your query is "select id,name from users where rollNo = 1001".

    Here query will return a object with id and name column. Your Response class is like bellow:

    public class UserObject{
            int id;
            String name;
            String rollNo;
    
            public UserObject(Object[] columns) {
                this.id = (columns[0] != null)?((BigDecimal)columns[0]).intValue():0;
                this.name = (String) columns[1];
            }
    
            public int getId() {
                return id;
            }
    
            public void setId(int id) {
                this.id = id;
            }
    
            public String getName() {
                return name;
            }
    
            public void setName(String name) {
                this.name = name;
            }
    
            public String getRollNo() {
                return rollNo;
            }
    
            public void setRollNo(String rollNo) {
                this.rollNo = rollNo;
            }
        }
    

    here UserObject constructor will get a Object Array and set data with object.

    public UserObject(Object[] columns) {
                this.id = (columns[0] != null)?((BigDecimal)columns[0]).intValue():0;
                this.name = (String) columns[1];
            }
    

    Your query executing function is like bellow :

    public UserObject getUserByRoll(EntityManager entityManager,String rollNo) {
    
            String queryStr = "select id,name from users where rollNo = ?1";
            try {
                Query query = entityManager.createNativeQuery(queryStr);
                query.setParameter(1, rollNo);
    
                return new UserObject((Object[]) query.getSingleResult());
            } catch (Exception e) {
                e.printStackTrace();
                throw e;
            }
        }
    

    Here you have to import bellow packages:

    import javax.persistence.Query;
    import javax.persistence.EntityManager;
    

    Now your main class, you have to call this function. First you have to get EntityManager and call this getUserByRoll(EntityManager entityManager,String rollNo) function. Calling procedure is given bellow:

    @PersistenceContext
    private EntityManager entityManager;
    
    UserObject userObject = getUserByRoll(entityManager,"1001");
    

    Now you have data in this userObject.

    Here is Imports

    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    

    Note:

    query.getSingleResult() return a array. You have to maintain the column position and data type.

    select id,name from users where rollNo = ?1 
    

    query return a array and it's [0] --> id and [1] -> name.

    For more info, visit this Answer

    Thanks :)

提交回复
热议问题