中没有实体相关的表的实体我有一个没有关联实体的表。我需要编写JPQL查询,它将根据该表的字段进行过滤。可能吗? 我知道我可以做下列之一:加入与JPQL
- 该表创建一个实体(但它基本上是一个连接表,所以它会看起来很奇怪创建一个实体类的话)
- 写本地查询(我不喜欢这种方法,如果我使用JPA,我只能使用JPQL)。
- 创建全功能ManyToMany映射(我只是不需要它)。
难道还有其他方法吗?
中没有实体相关的表的实体我有一个没有关联实体的表。我需要编写JPQL查询,它将根据该表的字段进行过滤。可能吗? 我知道我可以做下列之一:加入与JPQL
难道还有其他方法吗?
不幸的是,你不能用JPQL来做到这一点。
您应该使用SQL。 但是本机查询也可以返回实体。无论是如果返回值的实体匹配,或者这里描述使用@SqlResultSetMapping: http://javaee.support/sample/jpa-native-sql-resultset-mapping/
如果你只需要加入到实体上没有映射JPA 2.1能够加入任何表列的关系。
问题是我不需要真正的多对多对象映射,而只需要在我唯一的实体中收集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
遗憾的是不可能的,但你仍然可以写全加入像...(选择Table T1,表2 t2 where t1.col = t2.col) – Nimesh 2015-03-31 11:42:32
@Naman你的意思是在本地查询? – 2015-03-31 14:42:11
不是原生查询。这是我写的查询(从rate r中选择r,Product p其中r.productId = p.id和r.id in(:id)),我在entityManager.createQuery中使用了此查询。在这里我有同样的问题,我没有实体之间的关联。 – Nimesh 2015-04-01 04:08:50