web-dev-qa-db-ja.com

JPAリポジトリ:javax.persistence.NonUniqueResultException:結果は複数の要素を返します

以下のコードを使用すると、クエリの結果を取得できません。 Map<ContentType...またはMap<String...のどちらを使用しても、同じエラーが発生します:javax.persistence.NonUniqueResultException:結果は複数の要素を返します

JPAはリポジトリ内の複数の行を処理できるはずのようです。欠落している可能性があり、結果を出すのに苦労している他の注釈を探しました。

これを解決するために私が何をすべきかについての提案はありますか?

@Transactional
public interface ContentRepository extends JpaRepository<Content,Integer>{

    ....

    @Query(nativeQuery=true, value="SELECT content_type, COUNT(*) AS myColumn FROM dbo.content GROUP BY content_type")
    Map<ContentType, Integer> getContentCountByType();

}
12
Webnet

問題は、Map<ContentType, Integer>に一意のインデックスが約束されていないため、JPAがそれにマッピングすることを好まないことであるようです。代わりにList<Map<ContentType, Integer>>を使用すると、うまく機能します。

6
Webnet

これを試してみてください

モデルをリストに保持

@RequestMapping(value="/deleteDriver/{id}" , method=RequestMethod.POST)
public ResponseEntity<Object> deleteDriver(@PathVariable("id") Integer id)
{
    List<Driver> delete_driver=adminService.getDriverById(id);
    Map<String,Object> response=new HashMap<>();


    if(delete_driver==null)
    {
        response.put("status", "Failure");
        return new ResponseEntity<Object>(response,HttpStatus.NO_CONTENT);
    }
    else
    {
        response.put("status", "Success");
        adminService.delete(delete_driver);
        return new ResponseEntity<Object>(response,HttpStatus.OK);
    }

}

その後、リポジトリに

@Override
public void delete(List<Driver> delete_driver) {

    driverRepository.delete(delete_driver);
}
0
Mohammad