Jpa 少年警讯分组

Jpa 少年警讯分组,jpa,Jpa,我的问题是为什么glassfish日志中没有显示groupby。 我在下面添加了以下数据,因为有人想看到它 public List<Message> listAllMessageBySender(String currentUserID) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("PersistenceUnit"); EntityManager entityManager

我的问题是为什么glassfish日志中没有显示
groupby
。 我在下面添加了以下数据,因为有人想看到它

 public List<Message> listAllMessageBySender(String currentUserID) {
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("PersistenceUnit");
    EntityManager entityManager = emf.createEntityManager();

    TypedQuery<Message> eq = entityManager.createQuery("SELECT m FROM Message m WHERE m.sendBy.userId = :userid GROUP BY m.sendTo.userId", Message.class);
    eq.setParameter("userid", Integer.parseInt(currentUserID));
    List<Message> message = eq.getResultList();
    return message;
}
公共列表listAllMessageBySender(字符串currentUserID){ EntityManagerFactory emf=Persistence.createEntityManagerFactory(“PersistenceUnit”); EntityManager EntityManager=emf.createEntityManager(); TypedQuery eq=entityManager.createQuery(“从消息m中选择m,其中m.sendBy.userId=:userId GROUP BY m.sendTo.userId”,Message.class); eq.setParameter(“userid”,Integer.parseInt(currentUserID)); 列表消息=eq.getResultList(); 返回消息; } 玻璃鱼3.1.2.2原木

FINE: SELECT id, message, send_date, send_by, send_to FROM message WHERE (send_by = ?)
    bind => [50]


Data: 
User A : sendBy.userId = 50
User B : sendTo.userId = 44
User C : sendTo.userId = 43

id      send_date               send_by      send_to            message 

1   2013-03-14 14:58:46         44           50             50 send message to 44
2   2013-03-14 14:58:46         50           44             reply from 44 to 50
3   2013-03-14 17:38:52         44           50             2nd reply to 50
6   2013-03-14 18:22:10         50           44             44 reply to 50
7   2013-03-14 18:22:10         50           43             new

in the query above is i want to list all the user sent from User A. it causes duplication because there is two send_to 44. the xhtml below shows :

<ui:repeat value="#{messageController.items}" var="messageItem"> 
  <br />
  <div onclick="loadMessage()">
    <h:panelGroup layout="block" >
      <p:graphicImage height="50" width="50" value="#{messageItem.sendTo.profilePicture}"/>
    </h:panelGroup>

   <h:panelGroup layout="block" style="width: 270px;">                                        
     <h:outputText value="#{messageItem.sendTo.registerName}"/>
     <h:panelGroup layout="block" style="float:right;">
       <h:outputText value="#{messageItem.sendDate}" >
         <f:convertDateTime pattern="HH:mm"/>
       </h:outputText>
     </h:panelGroup>
   </h:panelGroup>

  </div>
   <p:remoteCommand name="loadMessageBean" action="#{messageController.loadMessage(messageItem.id)}" /> </ui:repeat>    


ERD 

User Table                        Message Table

user_id                            message_id
register_name                      send_date
                                   send_to     ----> referenced by user_id User Table
                                   send_by     ----> referenced by user_id User Table
FINE:选择id、消息、发送日期、发送人、从消息中发送到(发送人=?)
绑定=>[50]
数据:
用户A:sendBy.userId=50
用户B:sendTo.userId=44
用户C:sendTo.userId=43
id发送日期通过发送到消息发送
1 2013-03-14 14:58:46 44发送消息给44
2 2013-03-14 14:58:46 50 44回复44至50
3 2013-03-14 17:38:52 44第二次答复50
6 2013-03-14 18:22:10回复50
7 2013-03-1418:22:10543新
在上面的查询中,我想列出从用户A发送的所有用户。这会导致重复,因为有两个发送到44。下面的xhtml显示:

ERD 用户表消息表 用户id消息\u id 注册名称发送日期 发送到-->由用户id用户表引用 发送用户-->由用户引用用户id用户表
这个请求没有意义<当select子句至少包含一个聚合函数(sum、avg、min、max等)时,使用code>group by。所有其他列必须出现在
group by
子句中

例如,下面的查询是有意义的:

SELECT max(m.length), sender.userId from Message m
inner join m.sendBy sender
GROUP BY sender.userId
对于每个消息发送者,它将返回其最长消息的长度

用示例数据告诉我们您希望查询返回什么

如果您想获取用户A向其发送消息的所有不同用户,那么查询应该是

select distinct m.sendTo from Message m 
where m.sendBy.userId = :userid

对不起,但还不清楚。如果您想列出用户50发送的所有消息,并且用户50已经向用户44发送了两条消息,那么显然,查询应该检索这两条消息。如果您想获取用户50向其发送消息的所有不同用户,那么这是可能的,但是打印消息日期没有意义,因为显然,从用户50到用户44的消息(例如)将有几个不同的日期。实际上,它有一个用户表,链接到消息。我想显示的不仅仅是消息,还有用户。ahm暂时忽略发送日期。我将再次编辑问题以显示答案。请参见编辑我的答案。谢谢您的回答。是的,它在逻辑上可以工作,但是我得到一个错误,类“biz.dtit.golf.entities.User”没有属性“sendTo”。这是因为我认为我无法再从用户表中获取参考值。。。我想用这个手动删除副本。。。Map Map=newhashmap();对于(Message mess:Message){if(!map.containsKey(mess.getSendTo().getUserId()){map.put(mess.getSendTo().getUserId(),mess);}}上述查询返回用户实例。不是消息实例。这不是你想要的吗?