jpaにおけるin文の書き方
3002 ワード
[b]一)in(List)[/b]
[b]二)in(Long[])[/b]原生のJPAは以下の通りである.
コード試験一(成功):
コードテスト2(成功しなかったので,@Query(""")の形式では使えないと推定される.
[b]三)in(select)[/b]
コードテスト1(成功せず、困惑した;Adを全経路に変更してもだめだ.)
上のコードは成功していません.以下の案を変えたほうがいいです.この案ももっといいです.実はinを使う必要はありません.
[b]四)ジグソーシング、すなわち「2,3,4」という疑いはいけない[/b]
五.に注意
1)JPAオリジナルのsqlは,String startTimeでデータベース内のCalendar startTimeを比較することはできない.
@Query(nativeQuery=true,sql="あなたのsql文")は可能です.
2)[color=red]Page[/color]の形式で@Query([color=red]nativeQuery=true[/color],sql=[あなたのsql文])の文は使えないようです@Query("select t from TimePush t where t.ad in(?1)and t.pushTime>?2 and t.pushTime 3")
3)
[table]
||in (List)| in (Array)|in (select) |
|JPA(sqlを書く必要はありません)|ok|ok|--|
|原生sql|ok|ダメダメ|ダメダメ|
|nativeQuery sql|ok|未試験|未試験|
[/table]
@Modifying
@Query("DELETE FROM Height h WHERE h.user.id = ?1 AND h.id in (?2)")
public void deleteHeightInBatchByUserIdAndIdIn(Long uid, List hids);
[b]二)in(Long[])[/b]原生のJPAは以下の通りである.
public List findByFamilyIdAndUserIdIn(Long fid, Long[] uids);
コード試験一(成功):
Long[] adArray = new Long[ads.size()];
for (int i = 0; i < ads.size(); i++) {
adArray[i] = ads.get(i).getId();
}
timePushDao.findByIdIn(adArray);
public List findByIdIn(Long[] adIds);
コードテスト2(成功しなかったので,@Query(""")の形式では使えないと推定される.
Long[] adArray = new Long[ads.size()];
for (int i = 0; i < ads.size(); i++) {
adArray[i] = ads.get(i).getId();
}
@Modifying ( )
@Query("select t from TimePush t where t.ad.id in ?1 and t.pushTime>?2 and t.pushTime 3 ")
public List findPageByTimePush2(Long[] adIds, Calendar startTime, Calendar endTime);
[b]三)in(select)[/b]
@Query("SELECT t FROM Tweet t where t.user.id IN " +
"(SELECT fm1.user.id FROM FamilyMember fm1 where fm1.family.id IN " +
"(SELECT fm2.family.id FROM FamilyMember fm2 where fm2.user.id = ?1)) " +
"AND t.id < ?2")
public Page findFamiliesTweetsByIdLessThan(Long uid, Long tid, Pageable page);
コードテスト1(成功せず、困惑した;Adを全経路に変更してもだめだ.)
@Query("select t from TimePush t where t.ad.id in (select a.id form Ad a where a.title like ?1 and a.keyWord like ?2) ")
public List findPageByTimePush3(String title, String keyWord);
上のコードは成功していません.以下の案を変えたほうがいいです.この案ももっといいです.実はinを使う必要はありません.
public List findByAdTitleLikeAndAdKeyWordLike(String title, String keyWord);
[b]四)ジグソーシング、すなわち「2,3,4」という疑いはいけない[/b]
@Query(nativeQuery = true,
value = "select * from t_serve_area where addr_id in (?1) and manager_type = ?2 group by manager_id")
public List findDistinctManagerIdByIdsAndManagerType(String ids, Integer manager_type);
五.に注意
1)JPAオリジナルのsqlは,String startTimeでデータベース内のCalendar startTimeを比較することはできない.
@Query(nativeQuery=true,sql="あなたのsql文")は可能です.
2)[color=red]Page[/color]の形式で@Query([color=red]nativeQuery=true[/color],sql=[あなたのsql文])の文は使えないようです@Query("select t from TimePush t where t.ad in(?1)and t.pushTime>?2 and t.pushTime 3")
3)
[table]
||in (List)| in (Array)|in (select) |
|JPA(sqlを書く必要はありません)|ok|ok|--|
|原生sql|ok|ダメダメ|ダメダメ|
|nativeQuery sql|ok|未試験|未試験|
[/table]