【发布时间】:2017-02-13 15:40:17
【问题描述】:
有没有办法将自定义对象作为另一个自定义对象的内部对象包含在内? 例如,我有两个实体:
@Entity
class Foo {
@Id
private int id;
@Column
private String a;
@Column
private String b;
@OneToMany(...)
private Set<Bar> bars;
...
}
@Entity
class Bar {
@Id
private int id;
@Column
private String x;
@Column
private String y;
@Column
private String z;
...
}
我想编写一个查询来选择一个 FooQueryResult 对象,例如:
class FooQueryResult {
private String a;
private Set<BarQueryResult> bars;
...
}
class BarQueryResult {
private String id;
private String x;
...
}
我正在尝试类似下面的东西
String query =
"SELECT " +
"s.a, " +
"new package.BarQueryResult(f.bars.id, f.bars.x) " +
"FROM Foo as f " +
"WHERE f.id = ?1";
FooQueryResult site = factory.createEntityManager()
.createQuery(query, FooQueryResult.class)
.setParameter(1, fooId)
.getSingleResult();
但这以错误结束:
QuerySyntaxException: unexpected token: , near line 1, column 14 [SELECT s.a, new package.BarQueryResult(f.bars.id, f.bars.x) FROM package.Foo as f WHERE f.id = ?1]
是否可以做到这一点以及如何做到这一点?
【问题讨论】:
-
您是否尝试只选择
new package.BarQueryResult(..)而没有额外的s.a? -
它引发了另一个异常:QueryException: 非法尝试使用元素属性引用 [id] 取消引用集合 [foo0_.id.bars]