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