Probleme beim abfragen von untergeordneten Tabellen

Raphael_

Aktives Mitglied
Moin, ich habe eine Spring Boot Anwendung, in welcher es Bots gibt, welche Stocks kaufen können. Meine Bot entity sieht so aus:

Java:
@Getter
@Setter
@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 = "moneyLeftToInvest")
    private BigDecimal moneyLeftToInvest;

    @OneToMany(mappedBy = "bot", fetch = FetchType.EAGER, cascade = CascadeType.REMOVE)
    private List<Stock> stocks;

    @Column(name = "algorithm_name")
    private List<Algorithms> algorithms;
}

und meine Stock entity so:

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

    @JsonIgnore
    @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE,
            CascadeType.DETACH, CascadeType.REFRESH})
    @JoinColumn(name = "fk_botId") // Use the correct column name to refer to the Bot entity
    private Bot bot;

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

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


Wie ihr seht habe ich bei Bot eine Beziehung mit Stock, also immer, wenn ich einen Bot abfrage sollen auch alle stocks returnt werden. Das klappt soweit auch. Jetzt ist es aber so, dass man Stocks auch kaufen soll, das setze ich so um:

Code:
@Transactional
public void buyStock(Long id, StockBuyingRequest request) {

        Optional<Bot> botOptional = botRepository.findById(id);

        if (botOptional.isPresent()) {
            List<Stock> stocks = botOptional.get().getStocks();

            botOptional.get().setMoneyLeftToInvest(botOptional.get().getMoneyLeftToInvest().subtract(request.getAmount()));

            Stock stock = Stock.builder()
                    .stockType(request.getStockType())
                    .amount(buildStock(stocks, request))
                    .bot(botOptional.get())
                    .build();

            botRepository.save(botOptional.get());
            stockRepository.save(stock);
        }
    }
   @Transactional
    public BigDecimal buildStock(List<Stock> stocks, StockBuyingRequest request) {
        BigDecimal sumOfSameStocks = request.getAmount();

        List<Stock> filteredStocks = stocks.stream()
                .filter(stock -> stock.getStockType() == request.getStockType())
                .toList();

        for (Stock stock : filteredStocks) {
            sumOfSameStocks = sumOfSameStocks.add(stock.getAmount());
            stockRepository.deleteById(stock.getId());
        }

        return sumOfSameStocks;
    }

Also, was möchte ich hiermit erreichen? Immer wenn ein Stock gekauft wird, der bereits existiert bzw der StockType schon existiert sollen diese ganzen Stocks addiert werden und es soll genau ein Stock in der Datenbank gespeichert werden, der dann die Summe aller Stocks enthält. Das soll die Funktion buildStock machen. Das klappt soweit auch, sobald ich den stock dann aber returne bekomme ich nie den aktuellen stock zurück. Wenn ich davor keinen Stock gespeichert habe dann einen speicherte ist stocks einfach leer. Das sieht dann bspw so aus:


Code:
{
    "id": 5152,
    "name": "test",
    "moneyLeftToInvest": 900.00,
    "stocks": [],
    "algorithms": [
        "",
        ""
    ]
}

Davor hatte der Stock als moneyLeftToInvest: 1000 jetzt 900, also wurden 100 abgezogen, so wie ich es auch reingereicht habe, aber stocks ist einfach leer. Wenn ich dann den Bot explizit über die id abfrage bekomme ich das korrekte Ergebnis und in stocks ist der Stock auch drinnnen.

Wenn ich jetzt noch eine Anfrage stelle, also noch einen Stock kaufe, dann bekomme ich als return value den alten stock. Also genau den, den ich vorhin vermisst habe. Die return values sind also immer um eins verschoben und ich hab keine Ahnung woran das liegen kann. Es muss etwas damit zu tun haben, dass ich sozusagen in einem Schwung die repositories verändere und zurück gebe, weil wenn ich dann wie gesagt einen Endpoint abfrage, wo ich die id reinreiche und einen Bot zurück bekomme dann bekomme ich das richtige Ergebnis mit dem stock eben. Und an den Fetch Types habe ich übrigens auch schon geschraubt, das hat leider bei EAGER und LAZY keinen Unterschied gemacht.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
8u3631984 Spring JPA Probleme beim SPeichern von Sets Frameworks - Spring, Play, Blade, Vaadin & Co 3
8u3631984 Spring JDBC Probleme beim Spaltennamen Frameworks - Spring, Play, Blade, Vaadin & Co 3
8u3631984 Probleme beim Starten von TestContainer Frameworks - Spring, Play, Blade, Vaadin & Co 4
Dimax Spring App Probleme beim Ausführen auf dem Tomcat Server Frameworks - Spring, Play, Blade, Vaadin & Co 1
8u3631984 Probleme mit Records und JPA Frameworks - Spring, Play, Blade, Vaadin & Co 4
P JWT Probleme Frameworks - Spring, Play, Blade, Vaadin & Co 2
Kirby.exe Redirect Probleme Cross Origin Frameworks - Spring, Play, Blade, Vaadin & Co 34
Dimax Spring Security Probleme Frameworks - Spring, Play, Blade, Vaadin & Co 2
bueseb84 Probleme mit Spring Boot Docker und Bootstrap Frameworks - Spring, Play, Blade, Vaadin & Co 9
B Spring bean initialisierungs probleme Frameworks - Spring, Play, Blade, Vaadin & Co 0
H IE probleme mit multipartfile bei spring 3 anwendungen Frameworks - Spring, Play, Blade, Vaadin & Co 14
8u3631984 Problem beim Mocken Frameworks - Spring, Play, Blade, Vaadin & Co 9
R Tests beim extracten von sub value schlägt fehl Frameworks - Spring, Play, Blade, Vaadin & Co 6
8u3631984 Beim WebMVC Test wird Resource File nicht gefunden. Frameworks - Spring, Play, Blade, Vaadin & Co 1
8u3631984 Cross-Origin beim Abrufen von Spring Endpoint Frameworks - Spring, Play, Blade, Vaadin & Co 1
L Hilfe beim Erstellen einer Java Web Anwendung gesucht Frameworks - Spring, Play, Blade, Vaadin & Co 5
JanKrieger05 Error beim Speichern von Daten mit nullable JoinColumn Frameworks - Spring, Play, Blade, Vaadin & Co 0
Xentox501 Jump & Run: Beim springen bewegen(rechts,links) Frameworks - Spring, Play, Blade, Vaadin & Co 1
J Resolver für XML Schema Location beim Laden des Spring Application Context Frameworks - Spring, Play, Blade, Vaadin & Co 1
T JTable + JScrollePane Größe "springt" beim resizen des Fensters Frameworks - Spring, Play, Blade, Vaadin & Co 4
E Fehlermeldung von Spring Security beim Einloggen Frameworks - Spring, Play, Blade, Vaadin & Co 1
D Spring: Problem beim ausführen eines JUnit Tests. Frameworks - Spring, Play, Blade, Vaadin & Co 4

Ähnliche Java Themen

Neue Themen


Oben