You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot JPA多对一:按关联Category的title查询Gallery数据

解决根据Category标题查询Gallery的问题

首先得纠正你实体类里的一个小问题:Category中的@OneToMany关联应该是集合类型,毕竟一个分类对应多个Gallery,所以要把private Gallery gallery;改成private List<Gallery> galleries;,不然JPA映射会出问题:

@Entity(name="Category")
@Table(name="categories")
public class Category {
    @OneToMany(mappedBy="category")
    private List<Gallery> galleries; // 这里改为List集合
    /* other code */
}

接下来给你几种在GalleryService的getGallery方法中实现需求的方案,你可以按需选择:

方案1:Spring Data JPA派生查询(最简洁)

直接在GalleryRepository里定义派生方法,Spring Data JPA会自动帮你生成查询语句:

先在Repository中添加方法:

@Repository("galleryRepository")
public interface GalleryRepository extends JpaRepository<Gallery, Long>, SiteInfoCustomRepository {
    // 根据关联Category的title查询Gallery列表
    List<Gallery> findByCategoryTitle(String title);
}

然后在Service中调用:

@Override
public List<Gallery> getGallery(String cat) {
    return galleryRepository.findByCategoryTitle(cat);
}

方案2:自定义JPQL查询(更灵活)

如果需要更复杂的查询逻辑,可以用@Query注解写JPQL语句:

在Repository中添加:

@Query("SELECT g FROM Gallery g JOIN g.category c WHERE c.title = :categoryTitle")
List<Gallery> findGalleryByCategoryTitle(@Param("categoryTitle") String categoryTitle);

Service层调用:

@Override
public List<Gallery> getGallery(String cat) {
    return galleryRepository.findGalleryByCategoryTitle(cat);
}

方案3:EntityManager手动实现查询

如果你坚持要用EntityManager来写,这里给你正确的写法,确保返回符合要求的Gallery列表:

首先在Service中注入EntityManager:

@Service
public class GalleryService {
    @PersistenceContext
    private EntityManager em;
    private final GalleryRepository galleryRepository;

    // 构造函数注入Repository
    public GalleryService(GalleryRepository galleryRepository) {
        this.galleryRepository = galleryRepository;
    }

    @Override
    public List<Gallery> getGallery(String cat) {
        String jpql = "SELECT g FROM Gallery g JOIN g.category c WHERE c.title = :cat";
        TypedQuery<Gallery> query = em.createQuery(jpql, Gallery.class);
        query.setParameter("cat", cat);
        return query.getResultList();
    }
}

这些方案都能帮你正确查询到对应分类标题下的Gallery数据,其中方案1是最贴合Spring Data JPA设计理念的,推荐优先使用。

内容的提问来源于stack exchange,提问作者Indrasis Datta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 13:12:54