Wystawianie endpointu Spring+MySQL

0

Witam,
Posiadam dwie tabele w bazie danych w relacji wiele do wielu: wydarzenie oraz artysta.
Po wpisaniu w bazie danych prostej komendy SELECT * FROM event,artist; otrzymuje wszystkie informacje o wydarzeniu oraz artyście jaki jest do niego przypisany.
Chciałbym to teraz wystawić na endpoint i tutaj zaczyna się problem.

Posiadam klase Artysty w której są zainicjowane pola:

public class Artist {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id_artist;

   @NonNull
    private String name;

   @NonNull
    private String surename;
}

Klasa Repozytorium

public interface ArtistRepository extends JpaRepository<Artist, Long> {
    Optional<ArtistHasEvent> findById(int id_artist);
}

Klasa Serwisu artysty

public class ArtistService {
    @Autowired
    ArtistRepository userRepository;

   @Autowired
    ObjectMapper objectMapper;

   @CrossOrigin(origins = "http://localhost:3000")
    @GetMapping("/artistss")
    public ResponseEntity getArtist() throws JsonProcessingException {
        List<Artist> artists = userRepository.findAll();
        return ResponseEntity.ok(objectMapper.writeValueAsString(artists));
    }
}

Klasa Event

public class Event {

   @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
   private int id_events;

   @NonNull
    private String category;

   @NonNull
    private String date;

   @NonNull
    private String description;

   @NonNull
    private String duration;

   @NonNull
    private String location;

   @NonNull
    private String price;

   @NonNull
   private String title;
}

Klasa EventRepository

public interface EventRepository extends JpaRepository<Event, Long> {
    Optional<Event> findById(int id_events);
}

Klasa EventService

public class EventService {
    @Autowired
    EventRepository userRepository;

   @Autowired
    ObjectMapper objectMapper;

   @CrossOrigin(origins = "http://localhost:3000")
    @GetMapping("/events")
    public ResponseEntity getEvents() throws JsonProcessingException {
        List<Event> events = userRepository.findAll();
        return ResponseEntity.ok(objectMapper.writeValueAsString(events));
    }
}

W klasie DatabaseClient wystawiam endpointy przykładowo:

    @CrossOrigin(origins = "http://localhost:3000")
    @GetMapping("/artist/{id_artist}")
    public String getArtistById(@PathVariable("id_artist") Integer id_artist) throws JsonProcessingException{
        List artists = jdbcTemplate.query("SELECT * FROM artist WHERE id_artist = :id_artist",
                new MapSqlParameterSource()
                        .addValue("id_artist", id_artist), new BeanPropertyRowMapper<>(Artist.class));
        return objectMapper.writeValueAsString(artists);
    }

Pytanie: Czy mogę w jakiś w miare prosty sposób wystawić polecenie SELECT * FROM event,artist; żeby jako JSON otrzymać wydarzenie oraz artyste przypisanego?

0
Trad d napisał(a):

Po wpisaniu w bazie danych prostej komendy SELECT * FROM event,artist; otrzymuje wszystkie informacje o wydarzeniu oraz artyście jaki jest do niego przypisany.

  1. Poprosiłem Cię specjalnie abyś wstawił klasę event. Osobiście nie widzę tutaj żadnego powiązania między artystą a wydarzeniem. Co to znaczy jest do niego przypisany?
  2. Dlaczego w klasach serwice'owych wystawiasz endpointy? To się robi w controllerach.
  3. Dlaczego używając JpaRepository piszesz coś takiego:

W klasie DatabaseClient wystawiam endpointy przykładowo:

    @CrossOrigin(origins = "http://localhost:3000")
    @GetMapping("/artist/{id_artist}")
    public String getArtistById(@PathVariable("id_artist") Integer id_artist) throws JsonProcessingException{
        List artists = jdbcTemplate.query("SELECT * FROM artist WHERE id_artist = :id_artist",
                new MapSqlParameterSource()
                        .addValue("id_artist", id_artist), new BeanPropertyRowMapper<>(Artist.class));
        return objectMapper.writeValueAsString(artists);
    }

Po co Ci ArtistRepository z metodą findById skoro tego nie używasz?

Klasa Repozytorium

public interface ArtistRepository extends JpaRepository<Artist, Long> {
    Optional<ArtistHasEvent> findById(int id_artist);
}

To raczej nie zadziała.

Oczywiście widzę wyżej, że pisałeś o relacji wiele do wielu, ale nie pokazałeś nam jak wygląda ArtistHasEvent (jeśli to ta tabela).

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.