如何解决将QueryDsl与Spring结合使用时更改生成的QEntity类字段类型
@Document(collection = "messages")
public class Message {
@Id
private String id;
}
我正在使用QueryDsl生成Mongo查询。 Querydsl生成必要的QMessage类:
@Generated("com.querydsl.codegen.EntitySerializer")
public class QMessage extends EntityPathBase<Message> {
private static final PathInits INITS = PathInits.DIRECT2;
public static final QMessage message = new QMessage("message");
public final StringPath id = createString("id");
}
,其中id字段为StringPath。然后,我尝试使用带以下谓词的ID通过ID查询消息:
QMessage message = QMessage.message;
BooleanExpression predicate = message.id.goe("someId").and(message.id.loe("someId"));
并在QuerydslPredicateExecutor中使用findAll(predicate)方法。 并且确实创建了正确的查询:
find "messages",filter { $and: [ { _id: { $gte: "someId" } },{ _id: { $lte: "someId" } } ] }
但是问题是,如果按id作为字符串查询,则mongo无法找到任何内容。因为插入此文档时,mongo会在此字段上创建一个ObjectId,所以正确的查询应为:
find "messages",filter { $and: [ { _id: { $gte: ObjectId('someId') } },{ _id: { $lte: ObjectId('someId') } } ] }
所以我想出了手动创建必要路径的方法,
Path<Message> message = Expressions.path(Message.class,"message");
Path<ObjectId> idField = Expressions.path(ObjectId.class,message,"id");
Constant<ObjectId> objectIdGT = (Constant<ObjectId>) Expressions.constant(new ObjectId("someId"));
Constant<ObjectId> objectIdLT = (Constant<ObjectId>) Expressions.constant(new ObjectId("someId"));
BooleanExpression predicate = Expressions.predicate(Ops.GOE,idField,objectIdGT).and(Expressions.predicate(Ops.LOE,objectIdLT));
它可以工作,但是我想让QueryDsl和所有其他路径自动生成此路径。是否有任何注释\配置可自定义代码生成?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。