jpaにおけるin文の書き方

3002 ワード

[b]一)in(List)[/b]

@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]