EclipseLink& MongoDB:带ObjectId参数的NamedQuery

时间:2014-08-22 08:46:18

标签: mongodb jpa java-ee eclipselink nosql

我使用EclipseLink和MongoDB数据库处理JavaEE 7项目。 我想通过“NamedQuery”查询我的数据库,以通过id查找一个实体。我在MongoDB中的_id是一个ObjectID。 “setParameter”方法似乎不接受ObjectID。

在MongoDB提示符下,使用db.consumers.find({“_ id”:ObjectId(“53ea25e1fd218287108c6cfe”)})我有:

{"_id" : ObjectId("53ea25e1fd218287108c6cfe"),"csPostal" : "69001", "csTown" : "Lyon", "csAddress" : "7 place des terreaux", "csSiret" : "12312345645698", "csName" : "TEST Company", "__v" : 0 }

我的Bean中的NamedQuery:

@NamedQuery(name = "Consumer.findById", query = "SELECT cs FROM Consumer cs WHERE cs.csId = :csid")

我尝试了两个问题:

Consumer cs = this.getEm().createNamedQuery("Consumer.findById",Consumer.class).setParameter("csid",new ObjectId("53ea25e1fd218287108c6cfe")).getSingleResult();

Consumer cs = this.getEm().createNamedQuery("Consumer.findById",Consumer.class).setParameter("csid","53ea25e1fd218287108c6cfe").getSingleResult();

但它们不起作用,找到了0个结果。

消费者实体:

@Entity
@NoSql(dataType="consumers",dataFormat = DataFormatType.MAPPED)
@NamedQueries({
    @NamedQuery(name = "Consumer.findAll", query = "SELECT cs FROM Consumer cs"),
    @NamedQuery(name = "Consumer.findById", query = "SELECT cs FROM Consumer cs WHERE c.csId = :csid")})
public class Consumer{
    @Id
    @Field(name = "_id")
    private String csId;
    @Basic
    @NotNull
    @Field(name = "csName")
    private String csName;
    @Basic
    @NotNull
    @Field(name = "csSiret")
    private String csSiret;
    @Basic
    @NotNull
    @Field(name = "csAddress")
    private String csAddress;
    @Basic
    @NotNull
    @Field(name = "csTown")
    private String csTown;
    @Basic
    @NotNull
    @Field(name = "csPostal")
    private String csPostal;
    @OneToMany(mappedBy = "cs",fetch = FetchType.EAGER)
    private List<Article> aList;

    // Constructor & getters/setters
}

您知道如何使用ObjectID类型在_id上使用过滤器进行查询吗?

谢谢,Suxxa。

编辑:添加消费者实体

0 个答案:

没有答案