Spring Boot sql Beziehungen

Raphael_

Aktives Mitglied
Hi, ich arbeite derzeit an einer spring boot Anwendung, wo man Bots erstellen kann. Meine Bot entity sieht so aus:


Java:
@Data
@Entity
@Table(name = "bots")
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Bot {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(name = "name")
    private String name;

    @Column(name = "currentMoney", precision = 19, scale = 4)
    private BigDecimal currentMoney;

    @Column(name = "moneyLeftToInvest")
    private BigDecimal moneyLeftToInvest;

    @JoinColumn(name = "bot_id")
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
    private List<Stock> stocks;

    @ElementCollection
    @CollectionTable(name = "botAlgorithms", joinColumns = @JoinColumn(name = "bot_id"))
    @Column(name = "algorithm_name")
    private List<Algorithms> algorithms;
}

Und meine Stock Entity so:

Java:
@Data
@Entity
@Table(name = "stocks")
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Stock {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(name = "bot_id")
    private Long botId;

    @Column(name = "name")
    private StockType stockType;

    @Column(name = "amount")
    private BigDecimal amount;
}

Im Feld stocks der Bot entity wird mein stock repository durchsucht, das nach allen stocks in dem Feld bot_id nach der aktuellen id des Bots sucht. Damit möchte ich eben in die Liste alle Stocks reinschreiben, die zu diesem Bot gehören. Das funktioniert auch, wenn ich allerdings einen Bot löschen möchte, dann geht das nicht und ich bekomme diesen Fehler:

Code:
ERROR: update or delete on table "bots" violates foreign key constraint

Wie kann ich die Beziehung so setzen, dass wenn ich einen Bot lösche automatisch alle Stocks, die zu ihm gehören auch gelöscht werden und ich nicht diese exception bekomme?
 

KonradN

Super-Moderator
Mitarbeiter
Das orphanRevoval = true und den cascadeType.ALL hat er ja beides.

Daher frage ich mich gerade, ob es nicht evtl. an algorithms liegen könnte.
Da könnte dann ggf. eine Annotation wie
@org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.ALL)
ein Versuch wert sein.
 

Raphael_

Aktives Mitglied
Hi,

ehrlich gesagt strugle ich an der Stelle auch. Das Cascade All propagiert save / updat und delete nicht.

Siehe auch: https://stackoverflow.com/questions/306144/jpa-cascadetype-all-does-not-delete-orphans

Je nachdem, was du benutzt, musst du set orphan remove = true setzen.

Gruß,
Martin
So wie ich das verstanden habe ist das Problem, dass ich ja einfach nur die Ids abfrage und das mit dem Constraint nur funktioniert, wenn ich den kompletten Bot im Stock entity referenzieren würde... Ich finde es macht aber halt keinen Sinn den Bot im Stock zu "verbinden". Was ich mir gedacht habe, ist dass ich die deleteById Funktion aus dem repo überschreibe und dann dort eben immer die Stocks, die auch gelöscht werden müssen davor eben lösche. Dabei bekomme ich aber denselben Fehler.
 

Raphael_

Aktives Mitglied
Das orphanRevoval = true und den cascadeType.ALL hat er ja beides.

Daher frage ich mich gerade, ob es nicht evtl. an algorithms liegen könnte.
Da könnte dann ggf. eine Annotation wie
@org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.ALL)
ein Versuch wert sein.
Das hat leider auch nicht geholfen... Ich glaube, dass es was damit zu tun hat, da ich nicht den ganzen Bot referenziere, sondern eben nur die Bot id und dann greift das Constraint aus irgendeinem Grund nicht.
 

Raphael_

Aktives Mitglied
Hab das jetzt mit getter und setter ersetzt, hat aber das Problem natürlich auch nicht behoben. Ich versteh auch garnicht, warum das so kompliziert ist eine gute Lösung zu finden. Ich meine das kommt doch tausendfach vor, dass man in einer entity die id einer anderen entity hinterlegt...
 

LimDul

Top Contributor
Meist hinterlegt man entweder die direkte referenz oder macht es in beiden Richtungen nur über die ID. Diesen Mischmasch - A nach B über Objektreferenz, aber B nach A über id habe ich tatsächlich bisher noch nie gesehen
 

Raphael_

Aktives Mitglied
Meist hinterlegt man entweder die direkte referenz oder macht es in beiden Richtungen nur über die ID. Diesen Mischmasch - A nach B über Objektreferenz, aber B nach A über id habe ich tatsächlich bisher noch nie gesehen
Aber dann würde ich doch unnötige Beziehungen schaffen, was man eigentlich vermeiden sollte, oder nicht?
 

LimDul

Top Contributor
Aber dann würde ich doch unnötige Beziehungen schaffen, was man eigentlich vermeiden sollte, oder nicht?
Die hast du doch bereits geschaffen. Ich würde sagen entweder kennt stock das Bot Objekt oder nicht mal die Id - aber diesen Mischmasch halte ich für falsch. Das Problem ist, aus Sicht von JPA hast du eine Spalte in Stock, die eine zweifache Bedeutung hat - bot_id.

Das ist einmal ein reines Long-Attribut des Stock Objektes - ohne weitere Bedeutung.
Zum anderen ist es aber auch die Spalte, in der Bot die Rück-Referenz reinspeichert.
Diese beiden Bedeutungen sind getrennt. Ich vermute mal stark, dass sich JPA deswegen lang legt, weil es kann ja die Spalte z.B. nicht auf null setzen, nur weil ein Bot gelöscht wird. Schließlich ist in der Spalte ein Attribut von Stock gespeichert, was nix mit Bot zu tun.

Entweder du machst die Beziehung unidrectional und schmeißt das Attribut in Stock komplett raus (https://www.baeldung.com/spring-jpa-unidirectional-one-to-many-and-cascading-delete) oder du modellierst es sauber bidrectional und machst ein Bot-Objekt mit einer @ManyToOne Beziehung dran.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Spring Boot Test Assertions mit Objekten Frameworks - Spring, Play, Blade, Vaadin & Co 6
8u3631984 Pfad zu Test Datei in application.yml in Spring Boot Test Frameworks - Spring, Play, Blade, Vaadin & Co 7
M Spring Boot 3 Datenbanken zur Laufzeit Verbinden Frameworks - Spring, Play, Blade, Vaadin & Co 5
ExceptionOfExpectation In Meiner Spring-Boot Applikation verlangt die Datenbank Wert für eine ID Frameworks - Spring, Play, Blade, Vaadin & Co 5
H Spring Boot Applikation und JHM Benchmark sowie ContextConfiguration in H2 Tests ich bekomme es nicht hin Frameworks - Spring, Play, Blade, Vaadin & Co 2
ExceptionOfExpectation Tests in Spring-Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
Avalon Get Request doppelt abfeuern ohne Post Redirect Get Pattern. Spring Boot Thymeleaf MVC Frameworks - Spring, Play, Blade, Vaadin & Co 12
thor_norsk Konfigurationsprobleme mit Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 9
R Spring Boot Integration-testing mit Keycloak Frameworks - Spring, Play, Blade, Vaadin & Co 1
R Spring Boot Integration-testing mit Keycloak Frameworks - Spring, Play, Blade, Vaadin & Co 13
thor_norsk Spring Boot Fehler Frameworks - Spring, Play, Blade, Vaadin & Co 1
thor_norsk Spring Boot und Docker Frameworks - Spring, Play, Blade, Vaadin & Co 5
D Spring Boot Test ob Validation geprüft wurde Frameworks - Spring, Play, Blade, Vaadin & Co 8
K Spring Boot OneToMany Frameworks - Spring, Play, Blade, Vaadin & Co 6
8u3631984 Spring Boot Docker Image erstellen und mit docker-compose konfigurieren Frameworks - Spring, Play, Blade, Vaadin & Co 1
gradlew.bat spring-boot:run funktioniert nicht Frameworks - Spring, Play, Blade, Vaadin & Co 4
Zrebna Spring Boot/Thymeleaf: Bestätigungsemail senden. Frameworks - Spring, Play, Blade, Vaadin & Co 2
B Spring Boot und JPA Error creating bean Frameworks - Spring, Play, Blade, Vaadin & Co 24
R Spring Boot: Warum soll PasswordEncoder in einer neuen Methode definiert sein? Frameworks - Spring, Play, Blade, Vaadin & Co 1
D Spring Boot und Microservices Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Spring Boot additional Datasource for a single entity Frameworks - Spring, Play, Blade, Vaadin & Co 0
Avalon Wie sieht bei Euch das Deployment einer Spring Boot Anwendung aus? Frameworks - Spring, Play, Blade, Vaadin & Co 4
M Threads in Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 7
W DI-Problem in Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
T Spring Boot: Was bewirkt parent in maven genau? Frameworks - Spring, Play, Blade, Vaadin & Co 4
OnDemand Vaadin+Spring Boot erster Seitenload nach Neustart endlos Frameworks - Spring, Play, Blade, Vaadin & Co 0
doncarlito87 Wie erhalte ich ein JSON aus eine NativeQuery (Spring Boot)? Frameworks - Spring, Play, Blade, Vaadin & Co 8
Avalon @Query Select Abfrage liefert falsche Werte (Spring Boot, JPA, Hibernate) Frameworks - Spring, Play, Blade, Vaadin & Co 3
Avalon Erstellung Dockerimage mit spring-boot:build-image in Spring Boot mit Umgebungsvariablen Frameworks - Spring, Play, Blade, Vaadin & Co 0
D Spring Boot Field Injection in MapStruct Frameworks - Spring, Play, Blade, Vaadin & Co 5
OnDemand Spring Boot seltsame Logeinträge: Manipulationsversuche? Frameworks - Spring, Play, Blade, Vaadin & Co 2
D Spring Boot Mile Stone und Snapshot Versionen Frameworks - Spring, Play, Blade, Vaadin & Co 2
OnDemand Spring Boot Exception Body Frameworks - Spring, Play, Blade, Vaadin & Co 2
N Spring Boot - Overkill für private Projekte? Frameworks - Spring, Play, Blade, Vaadin & Co 3
K Migration eines internen Frameworks zu Spring:Boot Frameworks - Spring, Play, Blade, Vaadin & Co 0
Z Hibernate & Postgres in Spring Boot (Syntaxprobleme) Frameworks - Spring, Play, Blade, Vaadin & Co 2
Z Spring Boot mit JPA;, Hibernate, Rest & Lombok Frameworks - Spring, Play, Blade, Vaadin & Co 8
OnDemand Spring Security/Boot/Vaadin Cookie Problem bei iFrame Frameworks - Spring, Play, Blade, Vaadin & Co 4
OnDemand Spring Boot: Feld ignorieren Frameworks - Spring, Play, Blade, Vaadin & Co 3
N Buch zum Spring Framework bzw. Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 3
OnDemand Jasypt Spring Boot HIbernate wie komme ich an den Key? Frameworks - Spring, Play, Blade, Vaadin & Co 4
8u3631984 Spring Boot im Docker Container - Logback wird nicht verwendet Frameworks - Spring, Play, Blade, Vaadin & Co 13
sascha-sphw Spring Boot Resource Server (OAuth2) @MockMvc Frameworks - Spring, Play, Blade, Vaadin & Co 5
OnDemand Spring Boot CDN Frameworks - Spring, Play, Blade, Vaadin & Co 1
OnDemand Spring Boot Deserialiserung mit JSON Frameworks - Spring, Play, Blade, Vaadin & Co 9
OnDemand Spring Boot POST zu PHP API Frameworks - Spring, Play, Blade, Vaadin & Co 12
OnDemand Spring Boot WebClient ErrorHandling Frameworks - Spring, Play, Blade, Vaadin & Co 5
8u3631984 Spring boot : Unique Constraint mit Many to Many Frameworks - Spring, Play, Blade, Vaadin & Co 2
OnDemand Spring Boot Repository null Frameworks - Spring, Play, Blade, Vaadin & Co 1
OnDemand Spring Boot Limits API calls Frameworks - Spring, Play, Blade, Vaadin & Co 20
J Spring boot mit Keyclaok rollen basiert Frameworks - Spring, Play, Blade, Vaadin & Co 2
OnDemand Spring Boot Scheduler flexibel machen Frameworks - Spring, Play, Blade, Vaadin & Co 4
OnDemand Spring Boot + Vaadin API Security Frameworks - Spring, Play, Blade, Vaadin & Co 1
S Spring Boot und seine Module verstehen Frameworks - Spring, Play, Blade, Vaadin & Co 3
R Architektur für Spring Boot Projekt Frameworks - Spring, Play, Blade, Vaadin & Co 5
M Spring Boot, Versionskontrolle und Entwicklungsumgebung und Deployment Frameworks - Spring, Play, Blade, Vaadin & Co 2
Avalon Image aus JSON Objekt im Browser anzeigen (BLOB, extrahieren, konvertieren) Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
Avalon CSS Datei wird in Spring Boot mit Thymeleaf im Standardordner nicht gefunden Frameworks - Spring, Play, Blade, Vaadin & Co 3
OnDemand Spring Boot Mapping null bei GET Aufruf Frameworks - Spring, Play, Blade, Vaadin & Co 8
OnDemand Spring Boot Test mit Junit Frameworks - Spring, Play, Blade, Vaadin & Co 8
J Spring Boot - Reactor Frameworks - Spring, Play, Blade, Vaadin & Co 1
L Spring Boot, H2 und Restschnittstelle synchonisation mit Client Frameworks - Spring, Play, Blade, Vaadin & Co 10
TonioTec Spring Boot Datenbankabfrage Frameworks - Spring, Play, Blade, Vaadin & Co 7
OnDemand Spring Boot encoding Slash in URL Parameter Frameworks - Spring, Play, Blade, Vaadin & Co 7
S Spring Boot startet nicht Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Spring Boot -> War File | 404 in Tomcat Frameworks - Spring, Play, Blade, Vaadin & Co 20
LimDul Spring Boot Anwendung "automatisch" neustarten Frameworks - Spring, Play, Blade, Vaadin & Co 3
A Spring boot Frameworks - Spring, Play, Blade, Vaadin & Co 18
bueseb84 Unit Test mit Spring Boot - Service Autowired Frameworks - Spring, Play, Blade, Vaadin & Co 5
OnDemand DTO <> Entity Hibernate Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 28
OnDemand Verständnisfrage DTO Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 19
OnDemand Spring Boot Load Balancing Frameworks - Spring, Play, Blade, Vaadin & Co 5
S Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 1
OnDemand Spring Boot Threads Frameworks - Spring, Play, Blade, Vaadin & Co 6
S Spring Boot: Wert aus Config Datei ermitteln Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Spring Boot: Ein geschütztes Verzeichnis Frameworks - Spring, Play, Blade, Vaadin & Co 1
bueseb84 Probleme mit Spring Boot Docker und Bootstrap Frameworks - Spring, Play, Blade, Vaadin & Co 9
OnDemand Spring Boot Eureka/Zuul Frameworks - Spring, Play, Blade, Vaadin & Co 0
F Redirect in einer Spring Boot WebApplication Frameworks - Spring, Play, Blade, Vaadin & Co 7
B Erstes Spring Boot Projekt: Gameserver-Manager Frameworks - Spring, Play, Blade, Vaadin & Co 5
V Spring Boot, thymeleaf, Eingaben cashen oder per session speichern? Frameworks - Spring, Play, Blade, Vaadin & Co 2
S Spring Boot Security Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Spring Boot i18n Frameworks - Spring, Play, Blade, Vaadin & Co 28
bueseb84 Spring Boot : Update H2 Repository Frameworks - Spring, Play, Blade, Vaadin & Co 14
A Spring Boot/ OneToMany Relation Frameworks - Spring, Play, Blade, Vaadin & Co 29
S Spring Boot testen mit Service Klassen Frameworks - Spring, Play, Blade, Vaadin & Co 4
L Controller Spring Boot mit Java Frameworks - Spring, Play, Blade, Vaadin & Co 20
J Spring Boot H2 Datbase Frameworks - Spring, Play, Blade, Vaadin & Co 2
J Spring Boot Thymleaf mit Java.Optional Frameworks - Spring, Play, Blade, Vaadin & Co 0
L JavaFX Anwendung mit Spring Boot und mehrere FXML Forms Frameworks - Spring, Play, Blade, Vaadin & Co 5
P Mit Maven (und Spring-boot) ein FatJAR und ein EAR bauen Frameworks - Spring, Play, Blade, Vaadin & Co 3
OnDemand Spring Boot Basic Authentication langsam Frameworks - Spring, Play, Blade, Vaadin & Co 2
OnDemand Start Stop Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
H Spring Boot - Dependency Injection Frameworks - Spring, Play, Blade, Vaadin & Co 26
B Java Spring Boot - POM-Problem Frameworks - Spring, Play, Blade, Vaadin & Co 8
OnDemand Spring Boot parallele Requests Frameworks - Spring, Play, Blade, Vaadin & Co 1
OnDemand Spring Boot Resttemplate exchange XML Frameworks - Spring, Play, Blade, Vaadin & Co 6
S Root-Pfad zu meiner Spring Boot Application Frameworks - Spring, Play, Blade, Vaadin & Co 3
OnDemand Spring Boot Error Logging Frameworks - Spring, Play, Blade, Vaadin & Co 5
OnDemand Spring Boot Transactions Frameworks - Spring, Play, Blade, Vaadin & Co 10

Ähnliche Java Themen

Neue Themen


Oben