【问题标题】:Spring Data JPA + openjpa: Is it possible to join a table not in OR-Hierarchy?Spring Data JPA + openjpa:是否可以加入不在 OR-Hierarchy 中的表?
【发布时间】:2013-12-10 10:41:01
【问题描述】:

所以,下面的用例:

我有两个表和相应的实体,我们称它们为表 A(左)和表 B(右)。两个表都有一个“大小”列,但在我的 OR-Model 中,表 a 没有引用表 b 的对象。 现在我想要实现的(通过 Spring Data JPA @Query-Annotation / JPQL,不使用本机 SQL)类似于以下(稍微简化)查询:

@Query("select a from TheLeftTable a join TheRightTable b" +
       "where b.size = a.size ")
Page<TheLeftTable> findAllAvailableEntries(Pageable p);

但我在尝试启动我的 tomcat 时遇到以下异常原因:

...引起:org.apache.openjpa.persistence.ArgumentException:在字符 48 处遇到“join TheRightTable b”,但预期:[“.”、“FETCH”、“INNER”、“JOIN”、“左", ]

所以我的问题是:这通常是否可以仅使用 JPQL / JPA 创建这样的查询?请记住:在我的 OR-Model 中,TableA 没有来自 Table B 的对象。我简化的实体属性看起来像这样:

@Column(name = "size")
String size;

如果不可能,任何其他想法都会很棒。 (除了将我的表 A 的实体更改为具有实体 B 的对象,遗憾的是这是不可能的)

【问题讨论】:

    标签: java mysql spring jpa spring-data-jpa


    【解决方案1】:

    没问题,可以这样做:

    SELECT a FROM TheLeftTable a, TheRightTable b WHERE b.size = a.size
    

    这称为交叉连接,但如果列size 被索引,您不会注意到它有任何性能问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-01
      • 1970-01-01
      • 2023-01-24
      • 2016-11-15
      • 2020-09-26
      • 2017-01-12
      • 1970-01-01
      相关资源
      最近更新 更多