有没有办法将一个自定义对象作为另一个自定义对象的内部对象包含在内?例如,我有两个实体:
@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]
有可能这样做吗?
开箱即用是不可能的。您应该使用select new构造函数表达式,但是有一个限制-不支持嵌套构造函数调用,您不能编写select new FooQueryResult(..., new BarQueryResult)
,也可以使用自定义ResultSetTransformer。但是我建议创建Transformer类并手动进行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句