我正在尝试使用QueryDSL的自定义类型,如下所示:
public class Email implements Comparable<Email> {
public String name;
public String domain;
@Override
public int compareTo(Email o) {
return toString().compareTo(o.toString());
}
@Override
public String toString() {
return name + "@" + domain;
}
}
然后我有一个使用此自定义类型的QueryDSL实体:
@Entity
public class Record {
public Email email;
public String text;
}
然后我可以像这样构建查询:
BooleanExpression withEmail(Email email)
{
QRecord Q = QRecord.record;
BooleanExpression pred = Q.email.eq(email);
return pred;
}
但是,在使用MongodbSerializer
时,查询最终会在mongo Email
中设置DBObject
类型,之后我从mongo驱动程序中获得一个例外{{1} }无法序列化。
Email
如果我在java.lang.RuntimeException: json can't serialize type : class Email
中的email
字段中注释了这样的内容:
Record
然后它开始工作 - 虽然我必须在我的查询结构中使用电子邮件作为字符串来操纵电子邮件而不是电子邮件对象本身,例如。 @Entity
public class Record {
@QueryType(PropertyType.STRING)
public Email email;
public String text;
}
而不是像以前那样只是QRecord.record.email.eq(myEmail.toString())
。
我对此解决方案的问题是,使用QRecord.record.email.eq(myEmail)
对象的任何人都必须知道在将其嵌入到另一个对象中时应该对其进行注释。
问题:有没有办法以这样的方式注释Email
类,它总是被序列化为字符串实体 - 或者是否有更好的方法来实现它?