接受同事留下来的项目,没想到运行的时候还有bug,无法对对象的对象的属性进行条件查询,非常操蛋,琢磨了一下午终于解决了。
话不多说,贴代码
@Data
@Document
@ToString
@Accessors(chain = true)
public class ChatMessage {
@Id
private String id;
/**
* 消息的头部
*/
private MessageHeader messageHeader;
/**
* 消息的主体
*/
private MessageBody messageBody;
/**
* mongodb时区问题无解,故把时间转为字符串类型
*/
private String createTime;
}
@Data
@ToString
@Accessors(chain = true)
public class MessageHeader {
@Indexed
@JsonSerialize(using = ToStringSerializer.class)
/**
* 消息从哪里来(发消息者的topic,topic可暂时用用户Id代替)
*/
private String from;
@Indexed
@JsonSerialize(using = ToStringSerializer.class)
/**
* 消息到哪里去(接收消息者的topic,topic可暂时用用户Id代替)
*/
private String to;
}
现在是要对chatMessage中的messageHeader中的to进行条件查询,这里用的是jpa的MongoRepository
方法一:
//此处是添加所要根据的条件
ChatMessage message = new ChatMessage();
message.setMessageHeader(new MessageHeader().setTo("1401061832747122688"));
//此处是根据指定条件精确查询
ExampleMatcher matcher = ExampleMatcher
.matching()
.withMatcher("messageHeader.to", ExampleMatcher.GenericPropertyMatchers.contains());
Example<ChatMessage> example = Example.of(message, matcher);
System.out.println(repository.findAll(example));
方法二:
@Query("{ 'messageHeader.from' : ?0, 'messageHeader.to' : ?1}")
List<ChatMessage> findChatMessagesByMessageHeader_ToAndMessageHeader_From(String from, String to);