在 Spring Data JDBC 示例中,如何在 @Query
中编写一个简单的查询注释?
例如在 LegoSet Repository ,如何添加一个简单的 findByName
查询?
当我尝试过
@Query("select * from lego_set where name = :name")
List<LegoSet> findByName(@Param("name") String name);
它抛出以下错误:
org.springframework.data.mapping.MappingException: Could not read property @org.springframework.data.annotation.Id() @org.springframework.data.relational.core.mapping.Column(value=handbuch_id, keyColumn=)private java.lang.Long example.springdata.jdbc.basics.aggregate.Manual.id from result set!
...
> Caused by: org.hsqldb.HsqlException: Column not found: manual_handbuch_idat org.hsqldb.error.Error.error(Unknown Source) at org.hsqldb.error.Error.error(Unknown Source) `
此外,引用文档似乎是从一些通用的 spring 数据文档中复制的,因为它提到了 spring data jdbc 中尚不存在的派生查询。
最佳答案
作为对@jens-schauder 的回答的补充:
查询应该是:
@Query("SELECT ls.id, ls.name, ls.min_age, ls.max_age, " +
"h.handbuch_id AS manual_handbuch_id, h.author AS manual_author, h.text AS manual_text " +
"FROM lego_set ls JOIN handbuch h ON ls.id = h.handbuch_id " +
"WHERE name = :name")
List<LegoSet> findByName(@Param("name") String name);
使用此方法可以通过以下测试:
@Test
public void so_52978700() {
// prepare
LegoSet cars = createLegoSet("Small Car - 01", 5, 10);
cars.setManual(new Manual("Just put all the pieces together in the right order", "Jens Schauder"));
repository.save(cars);
// execute
List<LegoSet> actual = repository.findByName("Small Car - 01");
// verify
assertThat(actual).hasSize(1);
assertThat(actual.get(0).getName()).isEqualTo("Small Car - 01");
assertThat(actual.get(0).getManual().getText()).isEqualTo("Just put all the pieces together in the right order");
}
关于java - 如何在 Spring Data JDBC 中编写自定义 @Query?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52978700/