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 使用默认列名(properties
和 properties_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
列中的数据。
我尝试过的事情:
- 元素(r.properties_key)
- 元素(r.propertiesKey)
- 元素(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();
我正在尝试构建一个 HQL 查询以从 @ElementCollection 中提取属性:
public class Resource {
@Id
private String name;
@ElementCollection()
@CollectionTable(
name = "property",
)
@SortNatural
private final SortedMap<String, String> properties =
Maps.newTreeMap();
}
property
table 使用默认列名(properties
和 properties_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
列中的数据。
我尝试过的事情:
- 元素(r.properties_key)
- 元素(r.propertiesKey)
- 元素(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();