TypedQuery instead of normal Query in JPA

前端 未结 2 2044
遇见更好的自我
遇见更好的自我 2021-02-08 03:18

Is it possible to write this Query as a TypedQuery and let the two Long\'s run into a Object with two public Long fields inside.

    Query q = em.createQuery(
           


        
相关标签:
2条回答
  • 2021-02-08 03:41

    New code looks like this now. Thanks for you help.

        TypedQuery<CommUsed> q = em.createQuery(
            "SELECT new CommUsed(c.id,COUNT(t.id)) " +
            "FROM PubText t " +
            "JOIN t.comm c " +
            "WHERE c.element = ?1 " +
            "GROUP BY c.id", CommUsed.class);
        q.setParameter(1, e);
        HashMap<Long, Long> res = new HashMap<Long, Long>();
        for (CommUsed u : q.getResultList())
            res.put(u.commID, u.cnt);
    
    0 讨论(0)
  • 2021-02-08 03:53

    JPA has a feature just for this - constructor expressions:

    Query q = entityManager.createQuery("SELECT NEW com.example.DTO( c.id, COUNT(t.id)) FROM ...");
    List<DTO> dtos = q.getResultList();
    

    Your DTO class can be a POJO. All it will need is a public constructor accepting 2 Longs. Please note that you have to provide a fully qualified name of your class after the NEWoperator.

    0 讨论(0)
提交回复
热议问题