【问题标题】:JPA or JPQL how to return single row from a many to many relationshipJPA或JPQL如何从多对多关系返回单行
【发布时间】:2018-06-22 12:18:20
【问题描述】:

学习 JPA 和 JPQL。我有 3 个数据库表(例如):TVShow 和 Genre,以及一个 Join 表 show_genre(只有 show_id 和 Genre_id),用于 tvShow 和流派之间的多对多关系。

我有 2 个带注释的 Java 实体: 流派.java:

  @JsonManagedReference(value="showToGenre")
  @ManyToMany(mappedBy="genres", fetch=FetchType.EAGER)
  private Set<TVShow> tvShows;

和 TVShow.java

@JsonBackReference(value="showToGenre")
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name="show_genre",     
        joinColumns=@JoinColumn(name="show_id"),   
        inverseJoinColumns=@JoinColumn(name="genre_id")  
)
private Set<Genre> genres;

是否有 JPA 或 JPQL 方法可以在此多对多中查找特定行,例如给定流派 id 和 tvShow id,我可以找到给定 tvShow id 的特定流派对象吗?

【问题讨论】:

  • 你不会想到“连接表中的一行”。你想到了 OBJECTS。

标签: sql jpa many-to-many jpql


【解决方案1】:
em.createQuery("Select s from show join show.genres g where g.id = :genreId")
.setParameter("genreId", id)
.setMaxResults(1)
.setFirstResult(0)
.getResultList().get(0)

【讨论】:

  • 感谢您的回复。你能告诉我如何在插入 tvShow 和/或流派中的一个(或两者)时插入 Join 表 (show_genre) 吗?
  • 第二部分的答案:JPA 确实会自动处理连接器表插入。这部分不用担心:-)。只需要坚持双方的关系。
  • @frododot 实际上,如果您在这种关系上设置级联属性,它实际上会持续存在双方。当然,这意味着您必须将其中一方标识为所有者(可以创建另一方),这在 n:n 关系中并不像在 1:n 或 n:1 中那样清楚。无论如何.. 我很高兴能在这个问题上为您提供帮助。
猜你喜欢
  • 2020-11-26
  • 2018-04-04
  • 2021-01-16
  • 2018-01-24
  • 2017-09-03
  • 2017-07-07
  • 2013-06-17
  • 2011-02-23
  • 1970-01-01
相关资源
最近更新 更多