Spring JPA - unknown column in 'field list'

0

Witam. Robię sobie prosty projekt do przećwiczenia Spring-JPA i mam błąd, którego za bardzo nie rozumiem. Korzystam z bazy danych world i tabeli city, która ma pięć rekordów: ID, Name, CountryCode, District, Population. Dwie małe klasy i jeden interfejs wyglądają tak:

City:

@NoArgsConstructor
@Entity
@Table(name = "city")
@Getter
@Setter
@AllArgsConstructor
//@RequiredArgsConstructor
@ToString

public class City {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    int id;
    String name;
    String countryCode;
    String district;
    int population;
}

CityRepository:

package mainPackage.cityPackage;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;

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

    List<City> findCityByCountryCode(String code);
}

Main:

@SpringBootApplication
public class Main implements CommandLineRunner {

    @Autowired
    CityRepository cityRepository;

    public static void main(String[] args) {
        SpringApplication.run(mainPackage.Main.class, args);
    }

    @Override
    public void run(String... args) throws Exception {

        List<City> cities = cityRepository.findCityByCountryCode("MEX");
        cities.forEach(System.out::println);
    }}

No i ciągle wywala mi błąd Unknown column 'city0_.country_code' in 'field list' Wiele razy sprawdzałem czy nie pomyliłem się w nazwie klasy,
w nazwach i typach zmiennych. Gdzieś czytałem, że konwencja jest taka, że w klasie 'entity' nazwy zmiennych mają się zaczynać od małych liter. Zmieniłem to i dalej wywala ten sam błąd. Zastanawiam się, czy możliwe że to przez to, że 'CountryCode' to główny klucz z innej tabeli i że trzeba to jakoś oznaczyć. No ale wolałem się zapytać, żeby znowu nie przesiedzieć paru godzin, jeśli to nie to. Byłbym wdzięczny za pomoc.

0

Nie rozróżniasz kolumn od rekordów, ale Lombok wjechał elegancko :)

Czy w tabeli City masz kolumnę country_code? Pytam o bazę, nie o klasy.

0

Niby jak? Napisałem, że wyświetla się błąd sugerujący złą nazwę pola odpowiadającego kolumnie, ale sprawdzałem wiele razy i nazwa kolumny jest taka sama jak nazwa pola. Ostatecznie wszystko ruszyło jak dałem:

    @Transient
    String countryCode;

No ale nie o to chodzi. Chciałbym żeby czytało mi wszystkie kolumny.

2

Większość mapperów java entity <---> sql table korzysta z konwencji mySuperField w javie == my_super_field w sql. Więc zamiast transient (bo to oznaczenie dla fielda javowego, którego nie ma w bazie), zrób tak:

@Column("country_code")
    String countryCode;

I w bazie niech kolumna się też nazywa tak jak się nazywać powinna, czyli country_code

1 użytkowników online, w tym zalogowanych: 0, gości: 1