Spring Boot

Adriano10

Bekanntes Mitglied
Java:
@Repository
public interface TopicRepository extends CrudRepository<Topic, String> {
    Optional<Topic> getTopById(Long id);
    @Modifying
    @Query("update topic set name = :name where id = :id")
    void updateName(@Param(value = "id") Long id, @Param(value = "name") String name);
}

Kann man in Spring Boot eigentlich eigene Datenbankabfrage definieren?

Ich bekomme die Fehlermeldung "No property updateName found for type Topic"

Vielen Dank im Voraus
 

KonradN

Super-Moderator
Mitarbeiter
Also ich bin mir jetzt nicht sicher und kann es nicht testen, aber die Queries sehen bei uns immer so aus, dass wir sozusagen Felder richtig "qualifizieren":

Also statt
@Query("update topic set name = :name where id = :id")
hätte ich halt geschrieben:
@Query("update topic t set t.name = :name where t.id = :id")

Also ich mag mich irren und es geht ggf. auch so, wie Du es versucht hast, aber ich kenne die JPQL Queries irgendwie immer so. wie ich es dann geschrieben habe und ich habe es bisher auch irgendwie nie anders gesehen. (Was aber einfach an meinem Umfeld liegen kann!)

Edit: So ich mich nicht eh irre, wäre ggf. auch eine native Query ein Versuch wert. So da an das SQL keine speziellen Anforderungen gestellt werden von Seiten Spring Data, dann könnte z.B. gehen:

@Query(value="update topic set name = :name where id = :id", nativeQuery=true)

Zeigt mir, dass ich da noch viel mehr mit spielen muss um da sichere Aussagen treffen zu können. Irgendwie ging es immer und dann hat man sich da nicht weiter vertieft.
 

Adriano10

Bekanntes Mitglied
Also ich bin mir jetzt nicht sicher und kann es nicht testen, aber die Queries sehen bei uns immer so aus, dass wir sozusagen Felder richtig "qualifizieren":

Also statt
@Query("update topic set name = :name where id = :id")
hätte ich halt geschrieben:
@Query("update topic t set t.name = :name where t.id = :id")

Also ich mag mich irren und es geht ggf. auch so, wie Du es versucht hast, aber ich kenne die JPQL Queries irgendwie immer so. wie ich es dann geschrieben habe und ich habe es bisher auch irgendwie nie anders gesehen. (Was aber einfach an meinem Umfeld liegen kann!)

Edit: So ich mich nicht eh irre, wäre ggf. auch eine native Query ein Versuch wert. So da an das SQL keine speziellen Anforderungen gestellt werden von Seiten Spring Data, dann könnte z.B. gehen:

@Query(value="update topic set name = :name where id = :id", nativeQuery=true)

Zeigt mir, dass ich da noch viel mehr mit spielen muss um da sichere Aussagen treffen zu können. Irgendwie ging es immer und dann hat man sich da nicht weiter vertieft.
Vielen Dank für die ausführliche Info, ich probiere mal dann so aus.
 

Adriano10

Bekanntes Mitglied
Java:
    @Transactional
    @Modifying
    @Query(nativeQuery=true, value = "update gel.topic t set t.name = ?2 where t.id = ?1")
    Integer queryTopicByIdAndName(Long id, String name);

Jetzt funktioniert so, ich hatte falsches Import. Query und Modifying hatte ich von JDBC importiert, welchen dann entsprechend Fehlermeldung verursachte...
 

Ähnliche Java Themen

Neue Themen


Oben