Spring data mongodb. Generierung von id ' s Fehler
Habe ich eine experiment... eine gemeinsame Einrichtung für zwei Spring-data repositories:
- JPA
- MongoDB
zuerst habe ich' mit folgenden Bibliotheken Versionen:
spring-data-jpa : 1.7.0.RELEASE
spring-data-mongodb : 1.6.0.RELEASE
Habe ich ein Unternehmen:
@Entity
@Table(name = "ACCOUNTS")
public class Account {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ACCOUNT_ID")
private Long id;
@Column(name = "ACCOUNT_NUMBER")
private String number;
public Account() {
}
public Account(String number) {
this.number = number;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
}
JPA-Repository hat Folgendes Aussehen:
public interface Repository extends CrudRepository<Account, Long> {
public Account findByNumber(String number);
}
MongoDB-repository hat Folgendes Aussehen:
Paket ua.home.springdata.Untersuchung.repository.mongo;
public interface Repository extends CrudRepository<Account, Long> {
}
So... PPV funktioniert 🙂 Nichts besonderes 🙂
Aber MongoDB-test nicht bestanden 🙁
Ich erhalte eine Fehlermeldung:
org.springframework.dao.InvalidDataAccessApiUsageException: Nicht autogenerate-id vom Typ java.lang.Lange für die Entität des Typs ua.home.springdata.Untersuchung.Entität.Konto! bei org.springframework.data.mongodb.core.MongoTemplate.assertUpdateableIdIfNotSet(MongoTemplate.java:1149) bei org.springframework.Daten.mongodb.core.MongoTemplate.doSave(MongoTemplate.java:878) bei org.springframework.Daten.mongodb.core.MongoTemplate.speichern(MongoTemplate.java:833) bei org.springframework.data.mongodb.repository.support.SimpleMongoRepository.save(SimpleMongoRepository.java:73) bei org.springframework.data.mongodb.repository.support.SimpleMongoRepository.save(SimpleMongoRepository.java:88) bei org.springframework.data.mongodb.repository.support.SimpleMongoRepository.save(SimpleMongoRepository.java:45) bei der sun.reflektieren.NativeMethodAccessorImpl.invoke0(Native-Methode) bei der sun.reflektieren.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) bei der sun.reflektieren.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) bei org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:442) bei org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:427) bei org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:381) bei org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) bei org.springframework.aop.Rahmen.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) bei com.Sonne.proxy.$Proxy26.speichern(Quelle Unbekannt)
Ich denke, es ist ein sehr häufiger Fall. Warum nicht Spring data generieren zu können entity-id, wie Lange? Es ist so komisch.
- Wenn ich das hinzufügen der annotation @GeneratedValue meine IDE-wirft einen Fehler und dann und dort. Ich habe verwendet, PPV - Abhängigkeit in meinem 'pom.xml' Datei, aber auch das ist nicht die Arbeit als das, was ich habe ist, dass es Recherchen für eine MySQL DB und ich bin mit NoSQL (mongoDB). Also wenn du mir helfen kannst mit etwas bitte nicht. Vielen Dank im Voraus.
- Stockton, Wenn ich das hinzufügen der annotation @GeneratedValue meine IDE-wirft einen Fehler und dann und dort. Ich habe verwendet, PPV - Abhängigkeit in meinem 'pom.xml' Datei, aber auch das ist nicht die Arbeit als das, was ich habe ist, dass es Recherchen für eine MySQL DB und ich bin mit NoSQL (mongoDB). Also wenn du mir helfen kannst mit etwas bitte nicht. Vielen Dank im Voraus..
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mongo ObjectIds keine Zuordnung zu einem java-Lang-Typ.
Sehe ich dies in der Dokumentation, die unter 7.6.1:
http://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#mongo-template.id-handling
So ändern Sie die id in einen String oder ein BigInteger, und entfernen Sie das Strategie-argument.
Mit
@Id
wie ein String funktioniert.Stellen Sie sicher, dass Ihre Repository erweitert mit einem String (gleicher Typ wie die @Id):
Ich denke, das problem ist, dass Sie mit
Entity
stattDocument
. Mongo dao verwenden solltenDocument
annotation und das repository sollte verlängern dieMongoRepository
- Schnittstelle. Dies wäre ein Beispiel mit, was Sie haben. Zunächst werden Sie wollen, fügen Sie die mongo Abhängigkeit zu Ihrem pom (ich nehme an, Sie sind mit spring boot parent, so Versionsnummer wird dort definiert)Habe ich versucht, etwas wie dieses zu, für mongo db ich habe das
import org.springframework.data.annotation.Id;
version von@Id
in der Erwägung, dass der PPV, die ich verwendetimport javax.persistence.Id;
Mein Projekt mit Spring Data Rest + mongo
Daten Typ
Ich bin nicht mit jeder Art von
Long
oderBigInteger
. Es ist maßgeschneiderte Objekt. Lassen Sie uns sagenCompanyUID.class
. HierMongoRepository<DataLoadMerchant, CompanyUID>
wie das, was @Miguel sagtDann änderte ich meine getter und setter. Konvertieren
String
zuCompanyUID
oderCompanyUID
zuString
.register-Konverter in Mongo
Ich schaue mongo-Dokument. es scheint, ich kann nicht haben eine entityId mit @Id und auch entityId als meine Spalte mit Namen. Also ich ändern setter
Dann in MongoDB wird es 2 Spalte
Man _id und die andere ist entityId. Die beiden Spalte immer den gleichen Wert. Und wir verwenden nur entityId, die als Primärschlüssel für DRECK, auch wenn es nicht das wahre Primärschlüssel
mein code