У меня есть сопоставленный Message
объект, который имеет отношения родитель-потомок с самим собой.Таким образом, каждый Message
содержит Set<Message> comments
.Помимо комментариев, я хотел бы установить отношение один-к-одному с последним сделанным комментарием, чтобы я мог использовать последний комментарий в своем Criteria
.В SQL я устанавливаю это следующим образом (ни один комментарий не может иметь такой же postDate, так что это не приводит к двойным совпадениям для меня):
SELECT
parentM.*,
lastComment.*
FROM
messages parentM
left outer join messages lastComment ON
lastComment.parentId=parentM.messageId AND
lastComment.postDate=(SELECT MAX(subM.postDate) FROM messages subM WHERE subM.parentId = parentM.messageId);
Теперь я хотел бы знать, как настроить это в HibernateXML сопоставления, но я не уверен, как использовать свойство формулы или если я должен использовать другой механизм.Я надеялся, что следующее сработает, но это не сработает.
<one-to-one name="latestComment"
class="Message"
cascade="none"
property-ref="parent"
formula="postDate=(MAX(allComments.postDate) FROM messages allComments WHERE allComments.parentId=id)"
lazy="proxy">
</one-to-one>
С этим отображением я получаю желаемый результат, пока есть только один комментарий.Но форумла полностью игнорируется.Кажется, что во всех примерах используются простые формулы, просто отображающие другой столбец, а не подзапрос.
Ожидание некоторых указателей