HQL 查询从@ElementCollection 获取字段

HQL Query to get fields from @ElementCollection

我正在尝试构建一个 HQL 查询以从 @ElementCollection 中提取属性:

public class Resource {
  @Id
  private String name;

  @ElementCollection()
  @CollectionTable(
          name = "property",
          )
  @SortNatural
  private final SortedMap<String, String> properties =
        Maps.newTreeMap();
}

property table 使用默认列名(propertiesproperties_key)来存储数据(使用外键返回我的资源 table).

我有以下 HQL 查询,我在其中尝试 return 键和值。

final Query q = session.createQuery("select new list(r.name, elements(r.properties)) from Resource r where r.name like :nameFilter");

这是有效的,当我调用 q.list() 时,我得到一个包含名称和值的对象列表。我遇到的问题是我无法弄清楚如何获取与值关联的键。即 properties_key 列中的数据。

我尝试过的事情:

  1. 元素(r.properties_key)
  2. 元素(r.propertiesKey)
  3. 元素(r.key)

None 其中有效。

这个数据能不能出来?我如何找出要在我的 HQL 查询中使用的 属性 的名称?

加入集合然后使用index()获取key
index(p) 是键,p 是值。

List list = currentSession.createQuery(
"select new list(s.id, index(p), p) from Resource s join s.properties p").list();