MongoRepository findOne mit "id" anstelle von "_id"
Ich ein setup haben, sehr ähnlich wie diese: http://spring.io/guides/gs/accessing-data-mongodb/
In meinem POJO-Klasse I verwenden Sie ein String-Feld (annotiert mit @Id), und legen Sie es manuell an.
public class MyPojo {
@Id
private String id
public MyPojo(String id) {
this.id = id
}
//...
}
Wie im Beispiel verwende ich eine erweiterte Schnittstelle, die von MongoRepository:
public interface MyPojoRepository extends MongoRepository<MyPojo, String> {
}
Wenn ich meine Objekt
myrepo.save(new MyPojo("user"));
Alles funktioniert gut und in meiner Sammlung _id = "user" wie ich es erwarten zu sein.
Allerdings, wenn ich Abfragen will, dass das Objekt jetzt:
myrepo.findOne("user")
Erhalte ich null. Das debug-log zeigt, dass meine Sammlung wird abgefragt, mit
{ "id" : "Benutzer" }
statt "_id". Ist dieses Verhalten beabsichtigt? Ich finde das sehr verwirrend. Vor allem, weil die JavaDoc explizit erwähnt den Begriff "id" hier.
//EDIT:
myrepo.exists("user")
gibt true zurück,...
- Ich habe versucht, Ihnen eine Antwort geben. Lassen Sie mich wissen, wenn das klar ist oder Sie weitere Informationen benötigen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Fähigkeit, ändern Sie das Feld name gespeichert in die MongoDB wird mit der folgenden Anmerkung:
import org.springframework.Daten.mongodb.core.mapping.Feld
durch die Verwendung der annotation definieren Sie den Namen des Feldes in der mongoDB.
Beispiel:
Nun emailAddress werden in der Datenbank gespeichert, mit der Taste E-Mail.
Die mongoDB wird immer die _id als einer des Dokuments eindeutiger Bezeichner.
In der Fall Sie haben Sie können ein anderes Feld Anrufe userId, die Vervielfältigung der _id Feld, aber mit der syntax, die Sie mögen, wie:
Ich hoffe, das hilft.
Nicht, verwenden Sie den Konstruktor
da müssen Sie nicht berechtigt, die id manuell.
MongoDB verwendet dieses Feld intern, und Sie sind über ein string in ein ObjectID-Feld geben.
Einfach einen leeren Konstruktor und/oder Konstruktor initialisieren-Felder, die Teil des Dokuments (das ist das Feld vom Typ String für Benutzer.
In den link Ihrer Führer haben Sie ein gutes Beispiel!