Spring Data JPA + openjpa:是否可以加入不在OR-Hierarchy中的表?

时间:2013-11-25 16:04:03

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

所以,以下用例:

我有两个表和相应的实体,我们称之为表A(左)和表B(右)。两个表都有一个列" size",但在我的OR模型中,表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:遇到&#34;加入TheRightTable b&#34;在角色48,但预期:[&#34;。&#34;,&#34; FETCH&#34;,&#34; INNER&#34;,&#34; JOIN&#34;,&#34; LEFT& #34;,]

所以我的问题是:这通常是否可以用JPQL / JPA创建这样的查询?请记住:在我的OR模型中,TableA没有表B中的对象。我的简化的Entitiy-Properties看起来像这样:

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

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

1 个答案:

答案 0 :(得分:1)

没问题,可以这样做:

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

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