2013-12-06 3 views
7

Я попытался вставить следующий DBObject в MongoDB используя Spring Data:Вставьте DBObject в MongoDB используя Spring Data

BasicDBObject document = new BasicDBObject(); 
    document.put("country", "us"); 
    document.put("city", "NY"); 
    mongoTemplate.insert(document); 

где mongoTemplate мой шаблон Spring (org.springframework.data.mongodb.core.MongoTemplate).

При выполнении, я получаю:

Caused by: org.springframework.dao.InvalidDataAccessApiUsageException: No Persitent Entity information found for the class com.mongodb.BasicDBObject 
at org.springframework.data.mongodb.core.MongoTemplate.determineCollectionName(MongoTemplate.java:1747) 
at org.springframework.data.mongodb.core.MongoTemplate.determineEntityCollectionName(MongoTemplate.java:1732) 
at org.springframework.data.mongodb.core.MongoTemplate.insert(MongoTemplate.java:658) 

Моя JSON будет динамичным в конце. Итак, любая идея, как обеспечить эту информацию сущности динамически? Или есть другой способ вставить сырой JSON в Mongodb через Spring Data?

+0

Вы можете принять ответ ;-) –

ответ

10

Вы путаете данные весны с обычной персистентностью манго, используя драйвер java.

Если вы хотите сохранить данные в mongoDB напрямую с помощью java-драйвера, вы должны использовать BasicDBObject, как вы показали, за исключением того, что вы не будете использовать класс mongoTemaplate для сохранения, а скорее класс MongoClient. Так это будет выглядеть следующим образом:

MongoClient mongoClient = new MongoClient("localhost" , 27017); 
DB db = mongoClient.getDB("mydb"); 
BasicDBObject o = new BasicDBObject(); 
o.set...... 
coll.insert(o); 

Но если вы пытаетесь упорствовать документ, используя пружинные данные, то вам необходимо создать класс Java для представления документа (например: Person) и аннотирование этого класса @Document (collection = "person"), а затем используйте mongoTemplate (который является специфическим классом Spring-данных для сохранения этого объекта. Это очень похоже на использование JPA/спящего режима.

Таким образом, это выглядело бы примерно так

@Document(collection="person") 
public class Person { 
    private String fisrtName; 
    .... 

    Relevant getters and setters 

} 

И затем настойчивость

Person p = new Person(); 
p.setFirstName("foo"); 
p.setLastName("bar"); 
.... 
mongoTemplate.save(p); 
+0

Спасибо Клинтон! Тогда есть способ вставить данные через данные Spring без определения объекта домена? (особенно raw json) – Odyssee

+0

Похоже, есть очень недавний запрос функции для этого: https://jira.springsource.org/browse/DATAMONGO-771 и https://github.com/spring-projects/spring-data -mongodb/pull/79, но я не уверен, когда это может привести к его созданию. Также стоит отметить, что если вы используете репозиторий Ubunut, как описано выше, это версия или 2 за последней доступной версией. –

+0

Очистить, спасибо Clinton – Odyssee

2

Другой способ сделать это, чтобы получить прямой доступ к DBCollection объект через MongoTemplate:

DBObject company = new BasicDBObject(); 
... 
DBCollection collection = mongoTemplate.getCollection("company"); 
collection.insert(company); 
Смежные вопросы