2017-08-11 18 views
1

Javaを使用してMongoDBに2つのコレクションを保存する必要があります。 1つのコレクションはと他のコレクションは従業員です。 1つの部署が複数の従業員を持つことができる場所で、従業員一意のIDのようなコレクションを保存する場合は、部門の従業員リストにマップする必要があります。Javaの外部キーを持つMongoDb

例:

{ 
    "_id" : ObjectId("598da19250aa4ad2413d4bc0"), 
    "_class" : "com.department", 
    "departmentName" : "SAQ-A", 
    "departmentNumber" : "3_2", 
    "employee" : [ 
      "id" : "1", 
      "id" : "2", 
      "id" : "3" 
    ] 
} 

私はJavaを使用してMongoDBの中でそれを達成することができる方法は何か知っていることはできますか?

答えて

2

私はあなたがmongodbを扱うためにスプリングデータを使用していると仮定します。したがって、DBRefを使用して従業員を部門に結びつけることができます。幸いにもSpring Dataはあなたに@DBRefアノテーションを与えます。

Employeeクラス:

import org.springframework.data.annotation.Id; 
import org.springframework.data.mongodb.core.mapping.Document; 

@Document 
public class Employee { 

    @Id 
    private Integer id; 
    ... 

} 

部門クラス:

import org.springframework.data.annotation.Id; 
import org.springframework.data.mongodb.core.mapping.DBRef; 
import org.springframework.data.mongodb.core.mapping.Document; 

@Document 
public class Department { 

    @Id 
    private String id; 

    @DBRef 
    private Collection<Employee> employees; 
    ... 
} 

のMongoDBドキュメント:

{ 
    "_id" : ObjectId("598dc04ac4fdd0e29867ccbb"), 
    "_class" : "foo.bar.Department", 
    "employees" : [ 
     { 
      "$ref" : "employee", 
      "$id" : 1 
     }, 
     { 
      "$ref" : "employee", 
      "$id" : 2 
     } 
    ] 
} 

注: Employeeインスタンスが既にMongoDBの中に存在している必要があります。 DBRefは従業員をカスケードスタイルで保存しません。 cascadingについてこの記事をご覧ください。

関連する問題