2015-03-31 138 views
0

中没有实体相关的表的实体我有一个没有关联实体的表。我需要编写JPQL查询,它将根据该表的字段进行过滤。可能吗? 我知道我可以做下列之一:加入与JPQL

  1. 该表创建一个实体(但它基本上是一个连接表,所以它会看起来很奇怪创建一个实体类的话)
  2. 写本地查询(我不喜欢这种方法,如果我使用JPA,我只能使用JPQL)。
  3. 创建全功能ManyToMany映射(我只是不需要它)。

难道还有其他方法吗?

+0

遗憾的是不可能的,但你仍然可以写全加入像...(选择Table T1,表2 t2 where t1.col = t2.col) – Nimesh 2015-03-31 11:42:32

+0

@Naman你的意思是在本地查询? – 2015-03-31 14:42:11

+0

不是原生查询。这是我写的查询(从rate r中选择r,Product p其中r.productId = p.id和r.id in(:id)),我在entityManager.createQuery中使用了此查询。在这里我有同样的问题,我没有实体之间的关联。 – Nimesh 2015-04-01 04:08:50

回答

0

不幸的是,你不能用JPQL来做到这一点。

您应该使用SQL。 但是本机查询也可以返回实体。无论是如果返回值的实体匹配,或者这里描述使用@SqlResultSetMapping: http://javaee.support/sample/jpa-native-sql-resultset-mapping/

如果你只需要加入到实体上没有映射JPA 2.1能够加入任何表列的关系。

0

问题是我不需要真正的多对多对象映射,而只需要在我唯一的实体中收集id。于是,我来到了以下解决方案:

@ElementCollection 
@CollectionTable(
    name="user_to_feed", 
    joinColumns = @JoinColumn(name = "feed_id",referencedColumnName = "id") 
) 
@Column(name="user_id") 
private List<Integer> userIds = new ArrayList<>(); 

这让我做出以下查询:

select f.url from Feed f join f.userIds u where :id in u