有沒有辦法將自定義對象作爲另一個自定義對象的內部對象? 例如,我有兩個的entites:JPA/HIBERNATE:Query如何返回非實體對象或具有內部非實體對象的對象列表?
@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'? – Jack
它引起另一個異常:QueryException:非法嘗試取消引用集合[foo0_.id.bars]與元素屬性引用[編號] –