我使用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。
编辑:添加消费者实体