• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Spring Boot adnotacja @Query

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
433 wizyt
pytanie zadane 8 sierpnia 2020 w Java przez Szyszka Gaduła (3,510 p.)

Witam. W jaki sposób mogę użyć adnotacji @Query? Chciał bym wysłać do bazy danych H2 np. takie polecenie:

SELECT * FROM KONTA 

Jak tego dokonać? 

1 odpowiedź

0 głosów
odpowiedź 8 sierpnia 2020 przez Wiciorny Ekspert (278,710 p.)
package com.zetcode.repository;

import com.zetcode.model.City;
import java.util.List;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface CityRepository extends CrudRepository<City, Long> {

    @Query("select c from City c where c.name like %?1")
    List<City> findByNameEndsWith(String chars);
}
komentarz 8 sierpnia 2020 przez Szyszka Gaduła (3,510 p.)

Mhm, zrobiłem coś takiego:

AccountRepisotory.java:

package pl.szyszka.Account;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

@Repository
public interface AccountRepository extends JpaRepository<Account, Long>{
       @Query("insert into KONTA (ID, NAME, PASSWORD) VALUES (10, 'SuperNazwa', 'SuperHaslo')")
       public Account add();
}

AccountService.java:

package pl.szyszka.Account;

import java.util.List;
import org.springframework.stereotype.Service;

@Service
public class AccountService {
       private final AccountRepository accountRepository;

       public AccountService(AccountRepository accountRepository){
              this.accountRepository = accountRepository;
       }

       public Account add(){
              return accountRepository.add();
       }
}

Oraz RegisterController.java:

package pl.szyszka.Register;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import lombok.extern.slf4j.Slf4j;
import pl.szyszka.Account.Account;
import pl.szyszka.Account.AccountService;

@Slf4j
@Controller
@RequestMapping("/register")
public class RegisterController{
       private final AccountService accountService;

       RegisterController(AccountService accountService){
              this.accountService = accountService;
       }

       @GetMapping
       public String register(Model model){
              model.addAttribute("account", new Account());
              return "register";
       }

       @PostMapping
       public Account saveAccountData(Account account){
              log.info("Zarejestrowano konto o nicku: " + account.getNick());
              return accountService.add();
       }
}

Wywala mi taki bład:

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: VALUES near line 1, column 40 [insert into KONTA (ID, NAME, PASSWORD) VALUES (10, 'SuperNazwa', 'SuperHaslo')]

Co z tym zrobić?

komentarz 8 sierpnia 2020 przez Wiciorny Ekspert (278,710 p.)
i Ty w pytaniach "pokazujesz jaki jesteś znawca, kłócąc się o :D wspieranie przez mySQL",
czy ty czytasz w ogóle te błędy ?
nie dość że tam wszystko jest napisane to jeszcze przyczyna...

QUERY SYNTAX EXCEPTION -> błąd masz w zapytaniu , prawdopodobnie źle nazywasz swoje encje ;] stosuj JPQL lub uzyj aliasów
komentarz 8 sierpnia 2020 przez Szyszka Gaduła (3,510 p.)

No, pod żadnym pytaniem nie licząc swoich to się nie wypowiadam. Zielonego pojęcia o MySQL nie mam, nigdy nie miałem z nim nawet styczności. Nie przypominam sobie, żebym gdzieś na tym forum w ogóle się kłócił. Musiałeś mnie z kimś pomylić, ale już mniejsza o to. Zmieniłem encje na:

package pl.szyszka.Account;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import lombok.Data;

@Data
@Entity
@Table(name = "KONTA")
public class Account {
       @Id
       @GeneratedValue(strategy = GenerationType.AUTO)
       @Column(name = "ID")
       private Long id;

       @Column(name = "NICK")
       private String nick;

       @Column(name = "PASSWORD")
       private String password;
}

Tam miałem pomyłkę, bo w zapytaniu podalem NAME, a w encji to był nick, zmieniłem to i nic się nie zmieniło. Reszta pozostała bez zmian. Czy do @Query jest jakiś inny język SQL? W sensie jakoś pozmieniany?

Podobne pytania

0 głosów
1 odpowiedź 516 wizyt
pytanie zadane 6 sierpnia 2020 w Java przez Szyszka Gaduła (3,510 p.)
0 głosów
1 odpowiedź 703 wizyt
pytanie zadane 5 sierpnia 2020 w Java przez Szyszka Gaduła (3,510 p.)
0 głosów
1 odpowiedź 500 wizyt
pytanie zadane 27 stycznia 2018 w PHP przez Bakr Mądrala (6,850 p.)

93,182 zapytań

142,196 odpowiedzi

322,002 komentarzy

62,513 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2127p. - dia-Chann
  2. 2092p. - Łukasz Piwowar
  3. 2079p. - Łukasz Eckert
  4. 2037p. - Tomasz Bielak
  5. 2006p. - rucin93
  6. 2005p. - Łukasz Siedlecki
  7. 1964p. - CC PL
  8. 1835p. - Adrian Wieprzkowicz
  9. 1785p. - Michal Drewniak
  10. 1744p. - rafalszastok
  11. 1684p. - Mikbac
  12. 1624p. - Anonim 3619784
  13. 1520p. - Marcin Putra
  14. 1480p. - ssynowiec
  15. 1365p. - Dawid128
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...