使用在JPQL中没有关联实体的表加入实体

时间:2015-03-31 10:45:22

标签: java hibernate jpa jpql

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

  1. 为该表创建一个实体(但它基本上是一个连接表,所以为它创建一个实体类看起来很奇怪)
  2. 写一个原生查询(我也不喜欢这种方法。如果我使用JPA,我必须只使用JPQL。)
  3. 创建功能齐全的ManyToMany映射(我根本不需要它)。
  4. 还有其他方法吗?

2 个答案:

答案 0 :(得分:0)

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

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

如果您只需要加入未映射的关系上的实体,JPA 2.1就可以在任何表列上加入。

答案 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