Spring Data JPA中的联接查询

9
我想写一个类似于 join 的语句。
Select a.id,a.desc,b.desc from A a  left join B b on a.MEDIA_ID = b.ID

我创建了两个实体A和B,并创建了CrudRepository。
现在,在crudRepository中需要编写一个方法,该方法可以使用上述连接获取数据。
此外,我在实体A中创建了一个瞬态变量(命名为“bDescription”),如何在Spring Data JPA中实现此目标。
注意:我只需要加入以找出实体B中特定id(B中的主键并映射为A中的'MEDIA_ID')的“描述”(B中的一列)。
谢谢。

不要忘记将您选择的答案标记为已接受。 - Stephan
1个回答

6

这里是使用SpringData进行JOIN查询的示例

public final static String FIND_WITH_DESC_QUERY = "SELECT a,b.desc as  bDescription " + 
                                                   "FROM A a LEFT JOIN a.descriptions b " +
                                                   "WHERE a.mediaID = :id";


@Query(FIND_WITH_DESC_QUERY)
public List<Media> findWithDescription(@Param("id") Long id);

注意:

  • descriptions 是实体 A 和 B 之间关系的映射。
  • 假设有 @OneToMany Set<B> descriptions()

有用的链接


谢谢Ben。我想用另一种方式实现。表B有一个ID,我想在where条件中保留它,例如“SELECT a,C.Description as cDescription FROM A a LEFT JOIN a.descriptions c where R.media_Id = c.id”; 当我这样做时,它不起作用,在服务器启动期间会抛出映射异常,提示“A未映射”。 - S Atah Ahmed Khan
你的 A 类上有 @Entity 注解吗?(为了提供更多关于你的用例的信息:请编辑问题) - ben75
是的,它在那里。当我运行服务器时,它会抛出映射错误。 - S Atah Ahmed Khan
请确保在查询中使用类名而不是表名(如果它们不同)。 - ben75
对于实体之间的关系,我使用了@OneToMany和@JoinColumn(name="Description")注解,并在仓库中编写了查询语句'SELECT A,C.Description FROM A a LEFT JOIN a.cacheMedia C where R.media_Id = C.id'。但是我仍然无法获得结果,反而收到了BadGrammar异常。 - S Atah Ahmed Khan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接