当前位置: 首页 > 知识库问答 >
问题:

多对多Jpa查询Spring Boot

夏志国
2023-03-14

我有三个具有多对多关系的mysql表,我正在尝试在spring boot上进行Jpa查询。这些表是

  • 带有字段id、名称的产品
  • 附加字段id,名称
  • product_extra字段id、product_id、extra_id

Product table与extra table有多对多关系,因为一个产品可以有许多extra,因此需要Product\u extra table

这是我想在我的项目中包含的查询

SELECT extra.name 
FROM extra 
INNER JOIN product_extra ON extra_id = extra.id
WHERE product_id = ?;

我应该有一个像@ManyTo很多注释,我应该在哪里拥有它

共有1个答案

林泰平
2023-03-14

是的,你应该这样做。使用@ManyTo众多在产品和额外功能之间进行映射。确保使用Set而不是List进行映射,以获得更好的性能。它看起来像:

@Entity
@Table(name="product")
public class Product{

    @ManyToMany(cascade = {CascadeType.PERSIST,CascadeType.MERGE})
    @JoinTable(name = "product_extra",
        joinColumns = @JoinColumn(name = "product_id"),
        inverseJoinColumns = @JoinColumn(name = "extra_id")
    )
    private Set<Extra> extras = new HashSet<>();

}

@Entity
@Table(name="extra")
public class Extra{

    @ManyToMany(mappedBy = "extras")
    private Set<Product> products = new HashSet<>();
}

映射它们之后,您可以使用JPQL通过id获取产品及其额外的by:

select p from Product p left join fetch p.extras where p.id = :productId;
 类似资料:
  • 我在Eclipselink2.3.2中使用JPA2.0,在其中,我在产品和它们的颜色之间建立了多对多的关系。一个产品可以有多种颜色,一种颜色可以与多种产品相关联。这种关系在数据库中由三个表表示。 null 很明显,实体类有一组颜色-,它被命名为。 实体类有一组产品-,它被命名为。 我需要根据提供的与表中的颜色不匹配的从表中获取颜色列表。 对应的JPQL如下所示。 它生成以下SQL语句。 因为这将是

  • 问题内容: 我遇到了麻烦。 有一个实体发行人与与实体镇的ManyToMany关系有关: 那么实体镇也与地区有关 现在,我必须过滤(使用jpql)一个区域中的所有分发服务器。我能怎么做? 问题答案: 请参阅:https://en.wikibooks.org/wiki/Java_Persistence/JPQL

  • 问题内容: 有三个表:,并且,医院能提供的医疗服务和语言服务。因此,存在两个多对多关系。 简单ERD 现在,我想使用和搜索医院数据。 DaoImpl: 而且,如果我想从三个表中按邮政编码,医疗类型和语言进行搜索,那么如何编写一个jsql。 警告: 错误:org.hibernate.hql.internal.ast.ErrorCounter- 预期加入的路径!希望加入的路径!在org.hiberna

  • 我想管理与映射到联接表的实体的关系。因此我有3个实体类:、、。具有注释的和成员。 及其嵌入的密钥: 当我需要带有给定标记的帖子时,我希望使用以下查询: 整件事都在这里: https://github.com/riskop/jpa_hibernate_spring_boot_many_to_many_managed_on_join_table_problem

  • 我有一个关于jpa中的子查询类的问题。我需要创建两个自定义字段的子查询,但是子查询没有多选方法,选择方法有表达式输入参数(在查询中这是选择)和配置方法不合适。 此外,我对联接子查询结果有疑问,是否可能?怎么做呢? 我有: 链延伸度 消息实体 查询包装 我需要创建这个查询(这是查询的一部分,我从谓词中获得的另一部分。JPQL不合适) 在子查询中我做 但是,子查询在params中没有带有Compoun

  • 问题内容: 首先导入k和模块: 声明和对象: 有三个表:和。该Artist对象可以链接到多个。并且该Album对象可以链接到多个对象。的是保持之间的关系和紧密的: 所以我们有Artist链接到Album这是与Genre它看起来像这样:。 完成此设置后,我们Genre首先创建对象: 然后是两张专辑: 和艺术家: 创建数据库后,我们可以查询Albums链接到的内容Genre: 以及Artists链接到