【问题标题】:Query for join in Spring Data JPA在 Spring Data JPA 中查询联接
【发布时间】:2013-12-01 08:04:14
【问题描述】:

我想写一个类似的连接

Select a.id,a.desc,b.desc from A a  left join B b on a.MEDIA_ID = b.ID

我创建了两个实体 A 和 B 并创建了 CrudRepository<A,Long>

现在,需要在 crudRepository 中编写一个可以使用上述连接获取数据的方法。

另外,我在实体 A 中创建了一个瞬态变量(将其命名为“bDescription”) 如何在 Spring Data JPA 中实现这一点。

注意:我需要加入只是为了找出实体 B 的特定 ID(B 中的主键并映射为 A 中的“MEDIA_ID”)的“描述”(B 中的一列)。

提前致谢

【问题讨论】:

  • 不要忘记将您选择的答案标记为已接受。

标签: hibernate jpa-2.0 spring-data-jpa


【解决方案1】:

这是一个使用 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&lt;B&gt; descriptions()

useful link

【讨论】:

  • 谢谢本。我想以其他方式实现。表 B 有一个 id,我想保留在 where 条件下,例如“SELECT a,C.Description as cDescription FROM A a LEFT JOIN a.descriptions c where R.media_Id = c.id”;当我这样做时它不起作用,在服务器启动期间它抛出一个映射异常,上面写着'A未映射'
  • 你在 A 类上有 @Entity 注释吗? (提供有关您的用例的更多信息:请编辑问题)
  • 是的,它就在那里。当我运行服务器时,它会抛出映射错误。
  • 确保在查询中使用类名而不是表名(如果它们不同)
  • 对于实体之间的关系,我将其指定为 @OneToMany @JoinColumn( name="Description") Set cacheMedia;在存储库中,我的查询看起来像'SELECT A,C.Description FROM A a LEFT JOIN a.cacheMedia C where R.media_Id = C.id'。我仍然没有得到结果,而是我得到了 BadGrammer 异常。
猜你喜欢
  • 2021-01-11
  • 1970-01-01
  • 2017-11-28
  • 1970-01-01
  • 2019-02-28
  • 2015-08-04
  • 2018-09-23
  • 1970-01-01
相关资源
最近更新 更多