2017-04-27 6 views
0

私はEmployeeと呼ばれるモデルが70列あるとします。どのようにして SELECT id from t_employeespring + querydslにクエリを実装できますか?このコードから多くのコードを変更することなくQuerydslでSpringの特定の列のみを選択しますか?

BooleanExpression paramEmployee = qEmployee.company.id.eq(new Long(data.get("company").toString())); 
Iterable<Employee> employeeReportIterable =employeeRepository.findAll(paramEmployee); 

答えて

0

私はspring data documentationごとに示したように、スプリングとquerydslの統合は、動的述語はなく、完全なクエリの構築が可能になります怖いです。

コードを変更せずにEmployeeクラスからgetId()メソッドを使用することはできますが、

+0

うんをそれは私がフルモデルフィールドの右にリストを反復処理する必要が意味します! idをarraylistに分割する(ダブルプロセス)モデルフィールド全体ではなくidだけを返す方法はありますか?TT –

+0

少なくともquerydslを使用していますが、それは確かに私はそれがわからないクエリの複雑さを考慮すると、最適な選択です。おそらく、あなたは@Queryアノテーションを使ってカスタムクエリを作成することができます。 – megalucio

+0

@megalucioのようにQueryアノテーションを使用しても、述語でフィルタリングする機能が失われるため、これを行う方法も知りたいと思います。 – fernandodof

0

QueryDSL述語を使用し、単一の属性の応答を使用する場合は、spring-dataを使用せずにQueryDSLを直接使用できます。

// where entityManager is a JPA EntityManager 
JPAQuery<?> query = new JPAQueryFactory(entityManager); 

BooleanExpression paramEmployee = qEmployee.company.id.eq(new Long(data.get("company").toString())); 

List<Long> id = query.select(qEmployee.id).from(qEmployee).where(paramEmployee).fetch(); 
0

作業を行うリポジトリに特定のメソッドを作成できませんか?

employeeRepository.findAllByComapanyId(new Long(data.get("company").toString())); 

とQueryDSL(バージョンによって異なります)whithそれを実装:

return new JPAQuery(entityManager) 
.from(employee) 
.where(employee.companyId.eq(comapanyId)) 
.list(employee.id); 
関連する問題