【问题标题】:Spring-data-jdbc - How to set schema in many-to-many relationshipSpring-data-jdbc - 如何在多对多关系中设置模式
【发布时间】:2019-09-28 03:10:53
【问题描述】:

我在这里关注 spring.io 博客:https://spring.io/blog/2018/09/24/spring-data-jdbc-references-and-aggregates,并在此处有一个带有 Book 和 Author 实体的示例 SpringBoot 应用程序:https://github.com/b-sridhar/spring-data-jdbc-example

我收到以下错误:No value supplied for the SQL parameter 'demobook': No value registered for key 'demobook'

在调试时注意到执行的 SQL 查询是:INSERT INTO demo.book_author (author, demo.book) VALUES (:author, :demobook),应该是 INSERT INTO demo.book_author (author, book) VALUES (:author, :book)。发生这种情况是因为我将@Table("demo.book") 作为Book 实体的注释。如果我删除表名中的demo 模式,那么BookAndAuthorsTests 中的测试会正常进行。

如何为表Book设置schema

【问题讨论】:

    标签: spring-boot spring-data-jdbc


    【解决方案1】:

    这是 1.0.x 版本中的一个错误。它在 1.1 中是固定的。

    如果您将spring-boot-starter-parent 升级到2.2.0.M5,您将获得包含修复的spring-data-jdbc 版本1.1.0.RC2

    使用@Table 注释中的修复表名确实可以像让NamingStrategy 返回架构的方法一样工作。

    注意:您的配置需要扩展 AbstractJdbcConfiguration 而不是 JdbcConfiguration

    另一个注意事项:您的示例项目然后阻塞,因为AuthorRef 需要显式映射到表BOOK_AUTHOR。 我马上就留下 PR。

    【讨论】:

    • 感谢您对此进行调查。我尝试使用NamingStrategy 设置schema,但行为仍然相同。我在调试中看到插入查询仍然相同,即book 列在book_author 表中被称为demo.book。如果需要,我可以将更改推送到我的 github 示例。
    • 再次感谢。我在这里推送了更改:github.com/b-sridhar/spring-data-jdbc-example。您需要运行SpringDataJdbcExampleApplication。您应该注意到 @Table 注释不再用于实体。但是,sql 查询会在所有查询中为 Schema demo 添加前缀。 book_author 插入的 sql 查询仍然是 INSERT INTO demo.book_author (author, demo.book) VALUES (:author, :demobook)
    • 这是一个错误。我为它创建了一个你可能想看的问题:jira.spring.io/browse/DATAJDBC-421
    • 更新答案,也创建了PR。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 2013-03-07
    • 2019-05-05
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多