【问题标题】:DB4O query issueDB4O 查询问题
【发布时间】:2015-01-04 16:14:36
【问题描述】:

我有下一个实体使用 DB4O 持久化,它完美地持久化在 db 中。

public class Message {

    private String userFrom;
    private String userTo;
    private String message;
    private Date received;
    private Boolean readed;

    ...

}

我在尝试通过一个查询恢复持久对象时遇到问题。

使用 SQL 会这样。

SELECT * FROM Message WHERE readed = 0 
AND ((userFrom = 'asd' AND userTo = 'qwe') OR (userFrom = 'qwe' AND userTo = 'asd'))
ORDER BY received DESC

我当前的错误 DB4O 查询如下所示。

Query query =  super.getQuery();
query.constrain(Message.class);

Query readedQuery = query.descend("readed");
Query receivedQuery = query.descend("received");
Query userToQuery = query.descend("userTo");
Query userFromQuery = query.descend("userFrom");

receivedQuery.orderDescending()
    .constrain(readedQuery.constrain(Boolean.FALSE))
        .and(userToQuery.constrain("asd")
                .and(userFromQuery.constrain("qwe"))
            .or(userToQuery.constrain("qwe")
                .and(userFromQuery.constrain("asd"))));

return query.execute();

【问题讨论】:

    标签: db4o


    【解决方案1】:

    解决方案:

    receivedQuery.sortBy(new Comparator<Message>() {
    
        @Override
        public int compare(Message message1, Message message2) {
    
            return message1.getReceived().after(message2.getReceived()) ? 1 : -1;
        }
    }).readedQuery.constrain(Boolean.FALSE)
        .and(userToQuery.constrain("asd")
            .and(userFromQuery.constrain("qwe"))
        .or(userToQuery.constrain("qwe")
            .and(userFromQuery.constrain("asd"))));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多