如何使用QueryDSL使自定义类型表现为String

时间:2018-05-03 11:21:01

标签: java querydsl mongodb-java

我正在尝试使用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类,它总是被序列化为字符串实体 - 或者是否有更好的方法来实现它?

0 个答案:

没有答案