Spring Boot JPA «многие к одному» - выборка данных на основе связанных условий модели - PullRequest
0 голосов
/ 30 января 2020

У меня есть две модели - Галерея и Категория .

Категория имеет много Галерея - @OneToMany

Галерея принадлежит Галерея - @ManyToOne

Галерея. java

@Entity(name="Gallery")
public class Gallery {

    @ManyToOne
    @JoinColumn(name="category_id")
    private Category category;

    /* other code */
}

Категория. java

@Entity(name="Category")
@Table(name="categories")
public class Category {
    @OneToMany(mappedBy="category")
    private Gallery gallery;
    /* other code */
}

Галерея Репозиторий. java

@Repository("galleryRepository")
public interface GalleryRepository extends JpaRepository<Gallery, Long>, SiteInfoCustomRepository {

}

Вопрос : Как получить данные галереи на основе названия категории? Я попытался EntityManager и JOIN-запрос , но он не возвращается в нужном формате.

GalleryService. java

@Override
public List<Gallery> getGallery(String cat) {
      // this works fine, fetches gallery and associated category
      galleryRepository.findAll();

      // I want to fetch gallery data which matches a particular category title

}

1 Ответ

3 голосов
/ 30 января 2020

Вам просто нужно объявить метод в вашем репозитории, и Spring создаст запрос для вас.

Spring выводит запрос только из имени метода, если вы хотите получить всю галерею по имени категории объявите это так

@Repository("galleryRepository")
public interface GalleryRepository extends JpaRepository<Gallery, Long>, 
     SiteInfoCustomRepository {
    List<Gallery> findAllByCategoryName(String categoryName);
}

Вы можете вызвать этот интерфейс из вашего сервиса, например:

@Service
public class GalleryService {

    @Autowired
    GalleryRepository galleryRepository;

    public List<Gallery> getGalleriesByCategoryName(String name) {
        return galleryRepository.findAllByCategoryName(name);
    }
}
...