8

Spring Data を使用して、次の DBObject を MongoDB に挿入しようとしました。

    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は最後に動的になります。これらのエンティティ情報を動的に提供する方法はありますか? または、Spring Data を介して生の JSON を Mongodb に挿入する別の方法はありますか?

4

3 に答える 3

13

Java ドライバーを使用して、Spring-data と通常の mongo 永続性を混同しています。

Java ドライバーを使用してデータを mongoDB に直接永続化する場合は、mongoTemaplate クラスを使用せずに MongoClient クラスを使用することを除いて、示したように BasicDBObject を使用します。したがって、次のようになります。

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

ただし、spring-data を使用してドキュメントを永続化しようとしている場合は、ドキュメントを表す Java クラス (例: Person) を作成し、このクラスに @Document(collection="person") で注釈を付けてから、mongoTemplate を使用する必要があります。 (これは、このエンティティを永続化するための spring-data 固有のクラスです。これは、JPA/hibernate.

したがって、次のようになります

@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);
于 2013-12-06T10:43:15.330 に答える