【发布时间】:2019-03-28 15:25:04
【问题描述】:
我使用了来自Error creating bean with name 'personRepository': Invocation of init method failed; nested exception is com.mongodb.util.JSONParseException:的代码,现在尝试调用
Person p = personRepository.findByAddresses_City("London NW1");
System.out.println("PERSON FOR ADDRESS = "+p);
我得到空响应。
另外,下面的查询不会拉任何东西。
Query query = new Query(Criteria.where("address.$id").is(2L));
List<Person> l = mongoTemplate.find(query, Person.class);
System.out.println(l);
这里:
db.getCollection('address').find({})
/* 1 */
{
"_id" : NumberLong(1),
"address" : "221b Baker Street",
"city" : "London NW1",
"state" : "London",
"zipcode" : NumberLong(12345),
"_class" : "com.example.demo.model.Address"
}
和db.getCollection('person').find({})
/* 1 */
{
"_id" : NumberLong(1),
"name" : "Achilles",
"age" : 0,
"addresses" : [],
"_class" : "com.example.demo.model.Person"
}
/* 2 */
{
"_id" : NumberLong(2),
"name" : "Hektor",
"age" : 0,
"addresses" : [
{
"$ref" : "address",
"$id" : NumberLong(1),
"$db" : "address"
}
],
"_class" : "com.example.demo.model.Person"
}
如何解决这个错误?
@Document(collection = "address")
public class Address {
@Id
private long addressId;
private String address;
private String city;
private String state;
private long zipcode;
public Address() {
System.out.println("CAlling default cons");
}
@PersistenceConstructor
public Address(long addressId, String address, String city, String state, long zipcode) {
this.addressId = addressId;
this.address = address;
this.city = city;
this.state = state;
this.zipcode = zipcode;
}
// setter and getter... toString()..
}
和
@Document
public class Person {
@Id
private Long personId;
private String name;
private int age;
@DBRef(db = "address")
private List<Address> addresses = new ArrayList<>();
public Person() {
}
@PersistenceConstructor
public Person(Long personId, String name, int age) {
super();
this.personId = personId;
this.name = name;
this.age = age;
}
// setter, getter and toString
}
【问题讨论】:
标签: spring mongodb spring-data-mongodb