java - 如何在 Spring Data JDBC 中编写自定义 @Query?

标签 java spring spring-data spring-data-jdbc

在 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/

相关文章:

java - 在我的网络应用程序中从 spring 中获取 'No thread-bound request found' 错误

spring-boot - java中可用于 Elasticsearch 的不同客户端有哪些?

spring-security - QueryDslPredicateExecutor 和 Spring Data Rest 方面的安全上下文

java - 如何使用 CrudRepository 中的 nativeQuery 以键、值的方式获取记录总和?

java - 将java对象转换为XML?

java - 在发布到 phpmyadmin 时询问 asynctask

java - 必须在 servlet 上以及异步请求处理中涉及的所有过滤器上启用异步支持

java - 使用 Java Config 的 Spring Security 无法使用 eraseCredentials 方法

java - Java中处理null null值不打印

java - 播放不同音高的正弦波