2016-07-20 18 views
0

Ich habe zwei Modellklassen. Einer ist Company.java, ein anderer ist HumanResource.java.Mapping POJOs und Verwendung der Referenz in MongoDB mit Morphia

Company.java

@Entity("companies") 
public class Company { 
@Id 
private ObjectId id = new ObjectId(); 
private String companyName; 
private String emailAddress; 
private String pictureUrl; 
@Reference 
private List<HumanResource> humanResources; 
... 

HumanResource.java

@Entity("humanresources") 
public class HumanResource { 
@Id 
private ObjectId id = new ObjectId(); 
private String firstName; 
private String lastName; 
private String emailAddress; 
@Reference 
private Company company; 
... 

Was ich erreichen möchte ist, wenn ich eine Liste von Unternehmen zu Datenspeicher, verwandte Liste der Humanressourcen speichern Dokumente automatisch eingefügt werden soll .

Darüber hinaus erklärte ich

@Id 
private ObjectId id = new ObjectId(); 

in jeder Modellklasse. Ist es ein guter Weg oder sollte ich es ändern?

+0

Aber wie werden Sie das Unternehmen der HumanResource bevölkern, wenn Sie ein Unternehmen gründen oder umgekehrt? Bitte geben Sie auch Ihr Sammlungsschema an – Newton

+0

Die Unternehmenssammlung wird mit der Referenz der HumanResources-Liste gefüllt. Die HumanResources-Auflistung wird jedoch nicht in db aufgefüllt. – fivetech

Antwort

1

Morphia wird save() nicht auf diesen Referenzen aufrufen. Sie müssen save() für die Instanzen aufrufen, die Sie beibehalten möchten. Sie können eine Liste von Instanzen übergeben, so dass Sie keine Schleife benötigen, aber jede Instanz muss explizit übergeben werden.

+0

Ich habe es. Es funktioniert, danke. Ich habe eine andere Frage. Ich habe private ObjectId id = new ObjectId() deklariert; in allen Modellklassen. Ist es ein guter Weg oder sollte ich es ändern? – fivetech

+0

Morphia/Der Treiber füllt das ID-Feld für Sie aus, solange es sich um eine ObjectId handelt. Aber es ist nicht schaden, die ID manuell zu erstellen. Es ist einfach die meiste Zeit unnötig. – evanchooly

+0

Wenn ich ein Objekt ohne Referenzen speichern, wird es ausgefüllt. In diesem Beispiel, wenn ich nicht manuell erstelle, kann das @id-Feld nicht Null sein und die Mapping-Ausnahme ausgelöst werden. – fivetech