【发布时间】:2014-06-23 08:39:41
【问题描述】:
在我的数据库架构中,我与几封电子邮件进行了对话。我想从对话列表中获取最新的电子邮件。在 PostgreSql 中查询:
select distinct on (conversation_id) *
from email
where conversation_id in (7085214, 7084964)
order by conversation_id, processing_date desc
OpenJPA:
(List<Email>) entityManager.createQuery("SELECT
distinct(email.conversation.id), email FROM Email email WHERE
email.conversation.id in :id ORDER BY email.conversation.id,
email.processingDate DESC").setParameter("id", conversationIds);
它会返回对话 ID 的地图和对话中的整个电子邮件列表。
我怎样才能使它正确?
谢谢
【问题讨论】:
-
没有其他解决办法吗? email对象的映射很长
-
(标准)
distinct运算符不是函数。写distinct(foo),bar与distinct foo,bar相同。所有数据库混淆层(又名“ORM”)仅使用最基本的可用 SQL 功能。使用 DBMS 特定功能的唯一方法是原生 SQL -
感谢您的信息
标签: java postgresql openjpa