2017-10-13 10 views
0

Spring 1.5.4.RELEASEとEclipselink 2.6.4を使用して、次の2つの簡単な統合テストが失敗するのはなぜですか?findAllとfindByKeyInの予期しないトークン:SpringとEclipselink JPA

@Entity 
@UuidGenerator(name = DbDummy.KEY_GENERATOR) 
public class DbDummy { 

    public static final String KEY_GENERATOR = "KeyGenerator"; 

    @Id 
    @Column(name = ColumnName.KEY, nullable = false) 
    @GeneratedValue(generator = KEY_GENERATOR) 
    public String key; 

} 

@Repository 
public interface DbDummyRepository extends JpaRepository<DbDummy, String> { 

    List<DbDummy> findByKeyIn(List<String> keys); 

} 

findクエリを呼び出すときに両方のテストがJpaSystemExceptionで失敗:に基づいて

@RunWith(SpringRunner.class) 
@SpringBootTest(classes = {MyApp.class}) 
@WebAppConfiguration 
@DirtiesContext(classMode = ClassMode.BEFORE_CLASS) 
public class DbDummyIT { 

    @Autowired 
    private DbDummyRepository repo; 

    @Test 
    public void findAllFails() { 
     List<String> keys = Arrays.asList("1", "2"); 
     List<DbDummy> result = repo.findAll(keys); 
     assertThat(result.isEmpty()).isTrue(); 
    } 

    @Test 
    public void findByKeyInFails() { 
     List<String> keys = Arrays.asList("1", "2"); 
     List<DbDummy> result = repo.findByKeyIn(keys); 
     assertThat(result.isEmpty()).isTrue(); 
    } 

} 

。エラーメッセージは次のとおりです。

Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.4.v20160829-44060b6): org.eclipse.persistence.exceptions.DatabaseException 
Internal Exception: java.sql.SQLSyntaxErrorException: unexpected token:) in statement [SELECT Key FROM DBDUMMY WHERE (Key IN ((?,?)))] 
Error Code: -5581 
Call: SELECT Key FROM DBDUMMY WHERE (Key IN ((?,?))) 
    bind => [2 parameters bound] 
Query: ReadAllQuery(referenceClass=DbDummy sql="SELECT Key FROM DBDUMMY WHERE (Key IN (?))") 

ステートメントは本当に間違っています。は2値のタプルのリストをクエリしませんか?文字列のリストはKey IN (?, ?)と問い合わせるべきですか?

答えて

0

タイプをの代わりにCollection<String> keysに変更してください。 documentationによると、これはCollectionでなければならないかもしれません。Springはあなたのカスタムメソッドであり、クエリメソッドではないと考えているかもしれません。

+0

は(私はそれであった)それを 'Collection'やと試しを与え' Iterable'が、助けにはなりません。私たちがJpaSystemExceptionを取得し、その内部にSQLを持っているという事実は、Spring *が 'List'で宣言されたメソッドを認識していることを証明しているようです。 – Florian

関連する問題