Spring vor Beginners troubles with native SQL querys

Dimax

Top Contributor
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();

}
 
K

kneitzel

Gast
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

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

Top Contributor
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

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

Top Contributor
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

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).
 

Dimax

Top Contributor
Was ich noch fragen wollte ist wo ist der Unterschied zwischen:
Jetzt habe ich die Antwort auf diese Frage bekommen. Der Unterschied ist, dass die erste Anfrage direkt an die Daten Bank geschickt wird .Dabei ist zu beachten ,dass die Name von der DB Tabelle ist und nicht die Name des Modells. Die zweite Anfrage wird an das Modell geschickt, deswegen die Name des Modells angeben (..from NameDesModels) .
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Dimax Spring for Beginners, troubles. Frameworks - Spring, Play, Blade, Vaadin & Co 10
8u3631984 Ist es möglich in Spring Entity generische Listen verwenden Frameworks - Spring, Play, Blade, Vaadin & Co 3
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
R Spring Boot sql Beziehungen Frameworks - Spring, Play, Blade, Vaadin & Co 12
8u3631984 Spring JPA Probleme beim SPeichern von Sets Frameworks - Spring, Play, Blade, Vaadin & Co 3
M Spring Boot 3 Datenbanken zur Laufzeit Verbinden Frameworks - Spring, Play, Blade, Vaadin & Co 5
8u3631984 Spring JDBC Probleme beim Spaltennamen Frameworks - Spring, Play, Blade, Vaadin & Co 3
LimDul Spring-Batches in Docker über Rest starten/verfolgen Frameworks - Spring, Play, Blade, Vaadin & Co 0
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
R Eure Erfahrungen mit Primefaces und Spring - wer managed die Beans 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
L Spring Data und Rest Controller? Frameworks - Spring, Play, Blade, Vaadin & Co 4
thor_norsk Spring Boot Fehler Frameworks - Spring, Play, Blade, Vaadin & Co 1
L Spring Data und Rest Conroller? Frameworks - Spring, Play, Blade, Vaadin & Co 4
thor_norsk Spring Boot und Docker Frameworks - Spring, Play, Blade, Vaadin & Co 5
B Spring Amazon-SP-Api Frameworks - Spring, Play, Blade, Vaadin & Co 3
8u3631984 Aktualisiere Spring Controller Frameworks - Spring, Play, Blade, Vaadin & Co 4
L Spring Data: Modellierung mit einer Embeddable bean Frameworks - Spring, Play, Blade, Vaadin & Co 2
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
M Wann Spring Batch nutzen? Frameworks - Spring, Play, Blade, Vaadin & Co 1
P Spring Hessian Remote Beispiel Frameworks - Spring, Play, Blade, Vaadin & Co 20
8u3631984 Spring 2.7.8 Info Enpoint nicht zuerreichen 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
Zrebna Spring - Thymeleaf: Wieso wird gem. Fallunterscheidung entsprechende View nicht geladen? Frameworks - Spring, Play, Blade, Vaadin & Co 3
Dimax Spring UsernameNotFoundException(msg); auf der View msg ausdrücken Frameworks - Spring, Play, Blade, Vaadin & Co 1
Dimax Spring UsernameNotFoundException(Message) auf der View Message ausdrücken Frameworks - Spring, Play, Blade, Vaadin & Co 2
B Spring Boot und JPA Error creating bean Frameworks - Spring, Play, Blade, Vaadin & Co 24
R Spring Security: Wie kommt 'UserDetails' an Username und Passwort ran? Frameworks - Spring, Play, Blade, Vaadin & Co 6
R Spring Security: Wie den User dynamisch authentifizieren? Frameworks - Spring, Play, Blade, Vaadin & Co 8
R Spring Security: Authentication & Permissions Frameworks - Spring, Play, Blade, Vaadin & Co 4
R Spring Boot: Warum soll PasswordEncoder in einer neuen Methode definiert sein? Frameworks - Spring, Play, Blade, Vaadin & Co 1
8u3631984 Cross-Origin beim Abrufen von Spring Endpoint 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
T Spring Resourcen Ordner ermitteln Frameworks - Spring, Play, Blade, Vaadin & Co 5
B Spring JPA und Repository Frameworks - Spring, Play, Blade, Vaadin & Co 12
D Mapstruct Dependency Injection funktioniert nicht mit Spring Frameworks - Spring, Play, Blade, Vaadin & Co 15
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
T Spring Security: Run-as replacement Einsatzbereich? Frameworks - Spring, Play, Blade, Vaadin & Co 1
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
N Spring Integration - Logging Frameworks - Spring, Play, Blade, Vaadin & Co 7
D Spring Boot Field Injection in MapStruct Frameworks - Spring, Play, Blade, Vaadin & Co 5
D Spring Anfänger benötigt Hilfe Frameworks - Spring, Play, Blade, Vaadin & Co 9
OnDemand Spring Boot seltsame Logeinträge: Manipulationsversuche? Frameworks - Spring, Play, Blade, Vaadin & Co 2
D Spring Date keine neue Tabelle fuer Attribut Frameworks - Spring, Play, Blade, Vaadin & Co 1
T Spring Security Config File anpassen Frameworks - Spring, Play, Blade, Vaadin & Co 1
8u3631984 Spring Cloud : Resttemplate mit Loadballancer Frameworks - Spring, Play, Blade, Vaadin & Co 11
Dimax Spring resource not found Frameworks - Spring, Play, Blade, Vaadin & Co 2
M Spring MongoDB unique index Frameworks - Spring, Play, Blade, Vaadin & Co 3
M Spring Entity testen Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Spring Entity testen Frameworks - Spring, Play, Blade, Vaadin & Co 5
Dimax Spring App Probleme beim Ausführen auf dem Tomcat Server Frameworks - Spring, Play, Blade, Vaadin & Co 1
D Spring WebFlux Cors konfigurieren Frameworks - Spring, Play, Blade, Vaadin & Co 1
Dimax Schöne View mit anchor scrolling in Spring Frameworks - Spring, Play, Blade, Vaadin & Co 2
Dimax Spring JPA Multiple Keys Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Spring Security mit oauth2 in lokaler Konfiguration principal mocken Frameworks - Spring, Play, Blade, Vaadin & Co 0
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
D Was ist das Framework "Spring"? Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Spring Unit/Integrations Testing Frameworks - Spring, Play, Blade, Vaadin & Co 3
D Spring Unit Test: UnsatisfiedDependencyException: Error creating bean with name Frameworks - Spring, Play, Blade, Vaadin & Co 2
H Resource Liste Lazy Autowired Spring Context Frameworks - Spring, Play, Blade, Vaadin & Co 2
M Java Spring Security Frameworks - Spring, Play, Blade, Vaadin & Co 5
M Spring Security Login with Credentials Frameworks - Spring, Play, Blade, Vaadin & Co 0
N Spring Boot - Overkill für private Projekte? Frameworks - Spring, Play, Blade, Vaadin & Co 3
krgewb Spring und GWT - & wird zu & amp; Frameworks - Spring, Play, Blade, Vaadin & Co 2
K Migration eines internen Frameworks zu Spring:Boot Frameworks - Spring, Play, Blade, Vaadin & Co 0
OnDemand JPA/Spring Repository Like Suche leeres Ergebnis 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
M Spring Initializer - Webservices Frameworks - Spring, Play, Blade, Vaadin & Co 0
D Spring Hateoas Frameworks - Spring, Play, Blade, Vaadin & Co 1
ma095 Spring und Postgresql Errors Frameworks - Spring, Play, Blade, Vaadin & Co 4
OnDemand Spring+Vaadin App startet nicht Frameworks - Spring, Play, Blade, Vaadin & Co 1
OnDemand Spring Request externe API SSL Error Frameworks - Spring, Play, Blade, Vaadin & Co 7
OnDemand Spring Repo speichert, aber es kommt in der DB nicht an Frameworks - Spring, Play, Blade, Vaadin & Co 3
Dimax Im Spring ,Mysql-Funktion aufrufen Frameworks - Spring, Play, Blade, Vaadin & Co 2
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
8u3631984 Spring + Thymleaf : Checkbox Object mappen Frameworks - Spring, Play, Blade, Vaadin & Co 0
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 - Authentication object was not found Frameworks - Spring, Play, Blade, Vaadin & Co 3
8u3631984 Welches Spring Frontend Framework verwendet ihr und wie bzw wo ? Frameworks - Spring, Play, Blade, Vaadin & Co 7

Ähnliche Java Themen

Neue Themen


Oben