Spring vor Beginners troubles with native SQL querys

Dimax

Dimax

Bekanntes Mitglied
Hi Leute ,versuche weiter mein JSP Projekt in Spring umzuwandeln und bin dabei auf das Problem gestoßen,
wo ich versuche SQL Anfragen an die Datenbank zu schicken. Spring versteht kein natives SQL? oder was ich falsch gemacht habe?

Das ist die View wo ich versuche ein Neues Projekt in DB zu speichern:


Code:
<div>
    <p style="font-size:11pt; font-align:center;" ><b>Bitte geben Sie einen Namen f&uuml;r ein neues Projekt an</b><br></p>
        <form action="/addProj"  method="post" >
            <table border=0 cellspacing=0 align="center" cellpadding=10>
                <tr>
                    <td align="left">Projekt name:</td>
                    <td colspan='2'><input type="text" name="proj" size="20" maxlength="20" /></td>
                </tr>
                <tr>
                    <td align="left"></td>
                    <td colspan='2'><input type="submit" value="Anlegen" /></td>
                </tr>
            </table>

        </form>       
</div>
Das ist der Controller:
Java:
@Autowired
    private SascoProjektRepository projektRepository;
@PostMapping("/addProj")
    public String addProjToDb(@RequestParam String proj){
        Timestamp timestamp = new Timestamp(System.currentTimeMillis());
        int max=projektRepository.findMaxIdForProjekt()+1;
System.out.println("fffffffffffffffffff "+max);// ###################################Zur Kontrole
        Projekt projekt=new Projekt(max,proj,timestamp);
        projektRepository.save(projekt);
        return"/addProg";
    }
Das ist das Model:
Java:
@Entity
@NamedQuery(name="Projekt.findAll", query="SELECT p FROM Projekt p")
public class Projekt implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="projekt_id")
    public int projektId;

    private Timestamp hinzugefuegt;

    private String projekt;

    //bi-directional many-to-one association to Programm
    @OneToMany(mappedBy="projekt")
    private List<Programm> programms;

    //bi-directional many-to-one association to ProjektStatistik
    @OneToMany(mappedBy="projekt")
    private List<ProjektStatistik> projektStatistiks;

    public Projekt() {
    }
    //This is full Construktor##############################Den Construktor spreche ich an###############
    public Projekt(int projektId,String projekt,Timestamp hinzugefuegt) {
        this.projektId=projektId;
        this.projekt=projekt;
        this.hinzugefuegt=hinzugefuegt;
       
    }
    public int getProjektId() {
        return this.projektId;
    }

    public void setProjektId(int projektId) {
        this.projektId = projektId;
    }

Und das ist die Fehlerausgabe:

fffffffffffffffffff 5
2021-04-27 15:27:35.355 WARN 9628 --- [nio-8080-exec-6] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 1062, SQLState: 23000
2021-04-27 15:27:35.355 ERROR 9628 --- [nio-8080-exec-6] o.h.engine.jdbc.spi.SqlExceptionHelper : Duplicate entry '4' for key 'PRIMARY'
2021-04-27 15:27:35.394 ERROR 9628 --- [nio-8080-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet]

Meine Ausgabe printed 5 aber das Programm versucht neues Projekt mit id 4 inserten.

Ich hoffe Ihr könnt mir dabei helfen .Danke im Voraus.
Das ist Repository:
Code:
@Repository
public interface SascoProjektRepository extends CrudRepository<Projekt,Integer>{
    
    @Query("Select max(projektId) from Projekt")
    public int findMaxIdForProjekt();

}
 
T

thecain

Top Contributor
Wieso überlässt du das ID generieren nicht der Datenbank? Du hast ja sogar schon geneeated Value annotiert
 
kneitzel

kneitzel

Top Contributor
Um da noch andere Worte zu finden:
Mit GeneratedValue sagst Du, dass der Persistence Provider die Id vergeben soll (mit einer angegebenen Strategie, wobei AUTO default ist).

Aber Du willst die Id selbst vorgeben und dies nicht dem Persistence Provider überlassen. Das kannst Du natürlich machen, aber dann sollte diese Annotation entfallen.

Und an der Stelle der Hinweis: Du solltest darauf achten, dass Du keine Racing Conditions schaffst. Das ist ja prinzipiell Multi-Threaded und daher kann es sein, dass eine id mehrfach verwendet wird wenn zwei Threads parallel versuchen, eine neue Instanz anzulegen.
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Auch ganz unabhängig von möglichen Race Conditions ist einfach die maximale ID als Grundlage zu nutzen meist eine dumme Idee...
 
Dimax

Dimax

Bekanntes Mitglied
Danke Jungs, wie immer kompetente Hilfe hier. Das Problem lag wirklich am Auotoinkrement. Wie kneitzel sagt ,werde ich das Projekt später Multi-Threaded machen, das ist auch der Grund der Umwandlung von JSP zum Spring, deswegen habe ich keine andere Wahl ,die IDs müssen autoinkrementiert sein. Zum Schluss noch eine allgemeine Frage: Mein Projekt hat komplexe SQL -Anfragen, kann ich die einfach mit @Query annotiren und daraus eine Methode im repo-interface basteln zmb:
Finden das Programm mit wenigsten Lines of Code->
Aus JSP Projekt
Java:
int proj=request.getParameter(proj);
final String getMinLoC="select b.min, c.programm_id, d.programm from (    select min( a.max ) as min"+
                " from ( select max(zeilen_nr) as max, programm_id, projekt_id"+
                " from quelltext group by projekt_id, programm_id ) as a group by projekt_id) as b"+
                " inner join ( select max(zeilen_nr) as max, programm_id, projekt_id from quelltext where projekt_id="+proj+
                " group by projekt_id, programm_id ) as c on b.min = c.max inner join programm as d"+
                " on c.programm_id=d.programm_id and c.projekt_id=d.projekt_id;";
Mache ich in repo
Java:
@Query("select b.min, c.programm_id, d.programm from (    select min( a.max ) as min"+
                " from ( select max(zeilen_nr) as max, programm_id, projekt_id"+
                " from quelltext group by projekt_id, programm_id ) as a group by projekt_id) as b"+
                " inner join ( select max(zeilen_nr) as max, programm_id, projekt_id from quelltext where projekt_id=?1"+
                " group by projekt_id, programm_id ) as c on b.min = c.max inner join programm as d"+
                " on c.programm_id=d.programm_id and c.projekt_id=d.projekt_id)
public String findProgWithMinLoC(Integer proj);
Oder gibt bessere Methoden oder darf man sowas ,wie oben beschrieben ,nicht machen?
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Wie kneitzel sagt ,werde ich das Projekt später Multi-Threaded machen, das ist auch der Grund der Umwandlung von JSP zum Spring
Ich glaube da besteht ein fundamentales Unverständnis davon, wie JSP und auch Spring funktionieren, BEIDE sind im Kern IMMER Multi-Threaded.
Weder muss man von JSP zu Spring wechseln, um es "Multi-Threaded" zu machen, noch kann man Spring "später Multi-Threaded machen"


Finden das Programm mit wenigsten Lines of Code->
Beide haben genau 7 Zeilen :)

Oder gibt bessere Methoden oder darf man sowas ,wie oben beschrieben ,nicht machen?
Mindestens der Rückgabetyp der Methode ist falsch.
Das Statement lässt sich garantiert schöner schreiben, und die Methode lässt sich bestimmt auch besser benennen.

Ich bin mir auch nicht sicher, ob die Methode irgendwas sinnvolles macht.
 
Dimax

Dimax

Bekanntes Mitglied
Das Statement lässt sich garantiert schöner schreiben
Das Statement funktioniert und schöner schreiben ist nicht für dieses Thema.
Mindestens der Rückgabetyp der Methode ist falsch.
Die Methode gibt den Namen des Programms mit der kleinste Anzahl von Zeilen zurück ,daher String .
BEIDE sind im Kern IMMER Multi-Threaded.
Ist klar nur die Projekte nicht).Die muss ich noch dazu bringen aber noch weit davon entfernt.
Was ich noch fragen wollte ist wo ist der Unterschied zwischen:
Java:
@Query(  value = "
..... where projekt_id=?1"+
                "......", 
 nativeQuery = true)
 public String findProgWithMinLoC(Integer proj);

und
Java:
@Query("...where projekt_id=?1"+
                " .....)
public String findProgWithMinLoC(Integer proj);
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Die Methode gibt den Namen des Programms mit der kleinste Anzahl von Zeilen zurück ,daher String .
Die Query gibt was anderes zurück: select b.min, c.programm_id, d.programm
Ist klar nur die Projekte nicht).Die muss ich noch dazu bringen aber noch weit davon entfernt.
Die Programme sind jetzt schon Multi-Threaded. Du hast nur vielleicht Fehler die zu zB Raceconditions führen.


Was ich noch fragen wollte ist wo ist der Unterschied zwischen:
Das eine nutzt eine native Query, das andere JPQL.
Am besten mal in die Doku gucken (ganz generell empfehlenswert, in der JSP-Variante ist zB eine SQL-Injection möglich).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Dimax Spring for Beginners, troubles. Frameworks - Spring, Play, Blade, Vaadin & Co 10
S Spring - Zugriff auf Modellattribute in JPA funktioniert nicht Frameworks - Spring, Play, Blade, Vaadin & Co 1
Dimax Spring Whitelabel Error Page warum? Frameworks - Spring, Play, Blade, Vaadin & Co 5
NicoDeluxe 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
NicoDeluxe Spring Boot Scheduler flexibel machen Frameworks - Spring, Play, Blade, Vaadin & Co 4
NicoDeluxe 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 0
bueges Spring Test findet Component nicht Frameworks - Spring, Play, Blade, Vaadin & Co 4
NicoDeluxe Spring Boot Mapping null bei GET Aufruf Frameworks - Spring, Play, Blade, Vaadin & Co 8
NicoDeluxe Buchempfehlung Spring Security Frameworks - Spring, Play, Blade, Vaadin & Co 17
LesterBurnham Spring, Config Server, mehrere Gitlab Repos für Konfiguration - best practices Frameworks - Spring, Play, Blade, Vaadin & Co 1
NicoDeluxe Spring Boot Test mit Junit Frameworks - Spring, Play, Blade, Vaadin & Co 8
L Spring Thymeleaf Datatables Daten editieren? Frameworks - Spring, Play, Blade, Vaadin & Co 0
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
L Spring Data: Wie kann ich das Datenmodell richtig definieren? Frameworks - Spring, Play, Blade, Vaadin & Co 6
NicoDeluxe 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: Testen von unterschiedlichen application.properties Werten Frameworks - Spring, Play, Blade, Vaadin & Co 6
S Spring Boot -> War File | 404 in Tomcat Frameworks - Spring, Play, Blade, Vaadin & Co 20
Avalon Eventhandling mit Spring REST API Frameworks - Spring, Play, Blade, Vaadin & Co 13
L 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 0
iman Spring Security Frameworks - Spring, Play, Blade, Vaadin & Co 13
S Spring Security deaktivieren Frameworks - Spring, Play, Blade, Vaadin & Co 10
NicoDeluxe DTO <> Entity Hibernate Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 28
W Projekt Bootstrap/Kotlin/Spring Framework Frameworks - Spring, Play, Blade, Vaadin & Co 0
W Kotlin / Spring Framework Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Spring MongoDB: Attribut in der Superklasse und @Indexed erst in der Subklasse Frameworks - Spring, Play, Blade, Vaadin & Co 5
NicoDeluxe Verständnisfrage DTO Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 19
NicoDeluxe Spring Boot Load Balancing Frameworks - Spring, Play, Blade, Vaadin & Co 5
S Spring: MongoDB Assoziation Frameworks - Spring, Play, Blade, Vaadin & Co 1
S Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 1
NicoDeluxe Spring Boot Threads Frameworks - Spring, Play, Blade, Vaadin & Co 6
F Server-Java-Spring Websockets 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
NicoDeluxe 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
F spring apllication startet nicht, ports werden verwednet Frameworks - Spring, Play, Blade, Vaadin & Co 12
B Erstes Spring Boot Projekt: Gameserver-Manager Frameworks - Spring, Play, Blade, Vaadin & Co 5
B Spring Kurse von Baeldung Frameworks - Spring, Play, Blade, Vaadin & Co 6
Thallius Gibt es einen "Standard" Folder für Spring deployment auf Linux Servern? Frameworks - Spring, Play, Blade, Vaadin & Co 13
L Spring Data Einträge von User zahlen und auflisten Frameworks - Spring, Play, Blade, Vaadin & Co 7
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: Eine Klasse am Anfang instanzieren Frameworks - Spring, Play, Blade, Vaadin & Co 5
S Spring Boot testen mit Service Klassen Frameworks - Spring, Play, Blade, Vaadin & Co 4
iman Controller in Spring 4,0 Frameworks - Spring, Play, Blade, Vaadin & Co 2
S Spring JPA / Hibernate: save Methode arbeitet nicht Frameworks - Spring, Play, Blade, Vaadin & Co 2
Thallius Spring Backend Funktion mit Langzeit Requester Frameworks - Spring, Play, Blade, Vaadin & Co 2
F spring post null werte Frameworks - Spring, Play, Blade, Vaadin & Co 1
F Spring Webanwendung Datenbank Frameworks - Spring, Play, Blade, Vaadin & Co 47
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
A Spring Namenconvention Frameworks - Spring, Play, Blade, Vaadin & Co 4
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
NicoDeluxe Spring Boot Basic Authentication langsam Frameworks - Spring, Play, Blade, Vaadin & Co 2
NicoDeluxe Start Stop Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
H spring web Frameworks - Spring, Play, Blade, Vaadin & Co 26
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
S Spring: Werte speichern über Requests hinwege ohne DB Frameworks - Spring, Play, Blade, Vaadin & Co 24
NicoDeluxe Spring Boot parallele Requests Frameworks - Spring, Play, Blade, Vaadin & Co 1
NicoDeluxe Spring Boot Resttemplate exchange XML Frameworks - Spring, Play, Blade, Vaadin & Co 6
S Spring Data Repository delete bulk Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Root-Pfad zu meiner Spring Boot Application Frameworks - Spring, Play, Blade, Vaadin & Co 3
N MongoDB-Spring "Cannot use a complex object as a key value" Frameworks - Spring, Play, Blade, Vaadin & Co 0
NicoDeluxe Spring Boot Error Logging Frameworks - Spring, Play, Blade, Vaadin & Co 5
NicoDeluxe Spring Boot Transactions Frameworks - Spring, Play, Blade, Vaadin & Co 10
R Spring Data: Hibernate liest nicht alle Ebenen Frameworks - Spring, Play, Blade, Vaadin & Co 5
D Spring Boot auf virtuellen Server oder Cloud? Frameworks - Spring, Play, Blade, Vaadin & Co 4
L Spring Data: Detached Entity passed to persist Fehler Frameworks - Spring, Play, Blade, Vaadin & Co 6
R Nebenjob im Bereich JEE, Spring, Servlets, REST Frameworks - Spring, Play, Blade, Vaadin & Co 3
D AWS Server Spring Boot und Datenbank Frameworks - Spring, Play, Blade, Vaadin & Co 0
S Spring Boot: Eigene Config aufbauen Frameworks - Spring, Play, Blade, Vaadin & Co 6
S Spring MVC redirect Nachricht ohne erweiterung der URL Frameworks - Spring, Play, Blade, Vaadin & Co 5
B Spring Boot/Html-Content/Web-Server Frameworks - Spring, Play, Blade, Vaadin & Co 2
S Spring Boot - MVC - Error flushen Frameworks - Spring, Play, Blade, Vaadin & Co 0
K Spring Boot und RestFull Frameworks - Spring, Play, Blade, Vaadin & Co 3
L Spring Data: Multiple representations of the same entity Frameworks - Spring, Play, Blade, Vaadin & Co 14
A Spring ServerQueue Frameworks - Spring, Play, Blade, Vaadin & Co 0
A Spring Server Logging Frameworks - Spring, Play, Blade, Vaadin & Co 5
F Spring Boot Test Frameworks - Spring, Play, Blade, Vaadin & Co 14
D Datenbankanbindung mit Spring Frameworks - Spring, Play, Blade, Vaadin & Co 5
P Spring JPA Query zusammensetzen Frameworks - Spring, Play, Blade, Vaadin & Co 2
S Spring Data data.sql SQL Insert mit single quote Frameworks - Spring, Play, Blade, Vaadin & Co 4

Ähnliche Java Themen

Anzeige

Neue Themen


Oben