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

Spring Boot adnotacja @Query

Object Storage Arubacloud
0 głosów
353 wizyt
pytanie zadane 8 sierpnia 2020 w Java przez Szyszka Gaduła (3,490 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 (270,110 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,490 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 (270,110 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,490 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ź 400 wizyt
pytanie zadane 6 sierpnia 2020 w Java przez Szyszka Gaduła (3,490 p.)
0 głosów
1 odpowiedź 546 wizyt
pytanie zadane 5 sierpnia 2020 w Java przez Szyszka Gaduła (3,490 p.)
0 głosów
1 odpowiedź 421 wizyt
pytanie zadane 27 stycznia 2018 w PHP przez Bakr Mądrala (6,850 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...