Spring Boot-repository speichern funktioniert nicht (zeigt nur eine Auswahl)
Ich bin vor Stunden mit einem seltsamen Verfahren im Frühjahr Starten, wenn Sie versuchen, speichern Sie eine Entität zugeordnet.
Die entity-Klasse mit einem zusammengesetzten Schlüssel, der alle sein muss, die durch den Benutzer eingestellt ist, wie folgt:
package model
import javax.persistence.*
@Entity
@Table(name = 'MY_TABLE')
@IdClass(MyIdClass.class)
class MyClass implements Serializable{
@Id
@Column(name = "MY_COLUMN_1")
Long column1
@Id
@Column(name = "MY_COLUMN_2")
Long column2
@Id
@Column(name = "MY_COLUMN_3")
String column3
@Id
@Column(name = "MY_COLUMN_4")
Date date1
@Column(name = "MY_COLUMN_5")
Date date2
@Column(name = "MY_COLUMN_6")
BigDecimal column6
}
@Embeddable
class MyIdClass implements Serializable{
Long column1
Long column2
String column3
Date date1;
}
Das entsprechende repository ist:
package repository
import org.springframework.data.repository.CrudRepository
interface MyRepository extends CrudRepository<MyClass, Long>{
}
Mein service ist:
package service
import model.MyClass
import repository.MyRepository
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Service
@Service
class MyService {
@Autowired
MyRepository repository
void save(MyClass myClass) {
repository.save(myClass)
}
}
Mein controller stellt ein MyClass-Objekt mit allen Daten, einschließlich der den zusammengesetzten Schlüssel. Beim Aufruf der service-Methode speichern Sie das Objekt nicht in die Datenbank eingefügt. Ich sah die Protokolle und überprüft, dass es einem WÄHLEN Sie in MY_TABLE anstelle von EINFÜGEN. Ich versuchte, Sie nicht zu informieren, der zusammengesetzte Schlüssel in das Objekt und dann die save-Methode hat eine INSERT mit Fehler aufgrund der null-Werte in der primär-Schlüssel.
Ich verstehe wirklich nicht, warum die Einfügung erfolgt nicht, wenn der zusammengesetzte Schlüssel hat Werte. Wie kann ich es lösen?
Hab ich auch schon versucht mit @Transactional in der service-Klasse und hat nicht funktioniert. Ich habe es nicht eine Transaktion Konfiguration im Projekt seit dem Frühjahr Boot liefert es als Standard.
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nehme ich deinen Beispielcode und versuchte es auf eine Probe Spring-Boot-Projekt, wo ich war in der Lage zu speichern, um die H2-DB (In-memory) mit
@Embeddable
&@EmbeddedId
Anmerkungen. Wenn Sie möchten, um sicherzustellen, Sie können Klon des GitHub-repo, und führen Sie dieBootJpaApplication.java
als Java-Anwendung.Nach der Ausführung Zugriff auf den H2-Konsole mit dem folgenden link, von lokalen, wo die Tabelle details verifiziert werden können.
http://localhost:8080/h2-console
https://github.com/sujittripathy/springboot-sample.git
Hoffe, die Details hilft:)
Es scheint, Sie sind mit
MyIdClass
als Id fürMyClass
. So, das Repository sollte sein:Hoffe, dass dies helfen.