Vernetztes Objekt in der Datenbank abspeichern

RezaScript

Bekanntes Mitglied
Hallo,

ich benutze Spring Boot und weiss nicht wie ich genau vernetzte daten in der Datenbank abspeichern soll.

Das Frontend liefert mir folgendes Objekt:

obj.png

Mein Problem ist das Property "details".

Bevor wir zum Technischen gehen, würde mich erstmal die Logik interessieren. Und zwar, wie sollte das Datenbank-Design aussehen? Ich hätte am liebsten gerne nur 1 Tabelle. "details" möchte ich also nicht in einer separaten Tabelle haben. Aber wie speichere ich dann "details" in der Tabelle? JSON als String oder wie?

Nun zum Technischen:

Ich habe ein Entity, das so aussieht:
Java:
@Entity
public class NewQuote {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String contractorEmail;
    private String contractorName;
    private String contractorPhone;
    private String currency;
    private String description;
    @ElementCollection(targetClass = Details.class)
    private final List<Details> details = new ArrayList<>();

Java:
public class Details {
    private final String description;
    private final String label;

    public Details(String description, String label) {
        this.description = description;
        this.label = label;
    }

    public String getDescription() {
        return description;
    }

    public String getLabel() {
        return label;
    }
}

Bekomme aber die Fehlermeldung:
'Element Collection' attribute value type should not be 'Details'

Kann mich jemand bitte etwas aufklären?
 

LimDul

Top Contributor
Details müssen in eine eigene Tabelle. Alles ist kein Datenbank-Design sondern Grütze.

Hinzu kommt, dass für ElementCollection die Klasse Embeddable sein muss. Dann könnte es so gehen. Eigene Tabelle wird aber wie gesagt dafür auf jeden Fall angelegt.
 

RezaScript

Bekanntes Mitglied
@LimDul vielen Dank für die Antwort! Du hast mir ein Stück schon weitergeholfen. Ich habe @Embeddable für die Klasse Details hinzugefügt und die Fehlermeldung ist nun weg. Ich habe nun aber ein weiteres Problem ...

So sieht mein Constructor der Klasse NewQuote aus:

Java:
public NewQuote(String contractorEmail, String contractorName, String contractorPhone, String currency, String description, ArrayList<Details> details) {
    this.contractorEmail = contractorEmail;
    this.contractorName = contractorName;
    this.contractorPhone = contractorPhone;
    this.currency = currency;
    this.description = description;
    this.details = details;
}

Und so versuche ich die Daten abzuspeichern:

Controller
Java:
@PostMapping(value = "/save-quote", produces = MediaType.APPLICATION_JSON_VALUE)
public void saveQuote(@RequestBody Map<String, String> data) {
    newQuoteService.saveQuote(data);
}

Service
Java:
public void saveQuote(Map<String, String> data) {
    JSONObject json = new JSONObject(data);
    NewQuote newQuote = new NewQuote(
            json.getAsString("contractorEmail"),
            json.getAsString("contractorName"),
            json.getAsString("contractorPhone"),
            json.getAsString("currency"),
            json.getAsString("description"),
            json.getAsString("details")
    );
    newQuoteRepository.save(newQuote);
}

Ich bekomme eine Fehlermeldung, da es klar ist, dass json.getAsString("details") kein String sein muss, sondern ArrayList<Details>. Aber wie wandle ich das um?
 

Oneixee5

Top Contributor
Gibt es kein json.getAsArray("details") oder so. ähnlich? Dann kannst du das Array zu einer List umwandeln.
Warum überhaupt: @RequestBody Map<String, String> data) und nicht: @RequestBody NewQuote data?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Dimax Ein Objekt mit "auto_increment key " in der Schleife speichern Frameworks - Spring, Play, Blade, Vaadin & Co 7
JanKrieger05 Validierung vom nested Objekt funktioniert nicht Frameworks - Spring, Play, Blade, Vaadin & Co 0
Avalon Image aus JSON Objekt im Browser anzeigen (BLOB, extrahieren, konvertieren) Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
C Spring MVC: Objekt in der GET-Request wiederverwenden Frameworks - Spring, Play, Blade, Vaadin & Co 0
R Datenbank und Application Konsistents Frameworks - Spring, Play, Blade, Vaadin & Co 4
ExceptionOfExpectation In Meiner Spring-Boot Applikation verlangt die Datenbank Wert für eine ID Frameworks - Spring, Play, Blade, Vaadin & Co 5
O JUnit - Lösche Eintrag in Datenbank und prüfe ob Eintrag gelöscht wurde Frameworks - Spring, Play, Blade, Vaadin & Co 2
8u3631984 JPA - Entity dopplet inder Datenbank verhindern - UniqueConstraint scheitern aufgrund Vererbung ? Frameworks - Spring, Play, Blade, Vaadin & Co 5
Avalon REST API kein Content in Json aus Datenbank Frameworks - Spring, Play, Blade, Vaadin & Co 7
F Spring Webanwendung Datenbank Frameworks - Spring, Play, Blade, Vaadin & Co 47
D AWS Server Spring Boot und Datenbank Frameworks - Spring, Play, Blade, Vaadin & Co 0
T In-memory Datenbank mit Spring JDBC Frameworks - Spring, Play, Blade, Vaadin & Co 4
P Spring Security mit Datenbank Frameworks - Spring, Play, Blade, Vaadin & Co 5

Ähnliche Java Themen

Neue Themen


Oben