【问题标题】:Is there any possible way to map the name of foreign key in reference table? (ManyToMany)有没有办法在引用表中映射外键的名称? (多对多)
【发布时间】:2021-05-18 23:53:12
【问题描述】:

我尝试根据这篇文章(https://spring.io/blog/2018/09/24/spring-data-jdbc-references-and-aggregates)在DDD上下文中实现多对多关系的引用表

我对 JdbcEntity 有不同的命名,因为我有另一个名为 Book 的域实体来处理域逻辑。 (我决定将Domain modelPersistence model 解耦,即JdbcEntity 如下)

问题是类名BookJdbcEntity被自动映射为book_author中的外键名:

"PreparedStatementCallback; bad SQL grammar [SELECT `book_author`.`AUTHOR_ID` AS `AUTHOR_ID` FROM `book_author` WHERE `book_author`.`BOOK_JDBC_ENTITY` = ?]; nested exception is java.sql.SQLSyntaxErrorException: (conn=845) Unknown column 'book_author.BOOK_JDBC_ENTITY' in 'where clause'",

有没有办法生成下面的 SQL 语句? (book_id 而不是BOOK_JDBC_ENTITY

SELECT `book_author`.`AUTHOR_ID` AS `AUTHOR_ID` FROM `book_author` WHERE `book_author`.`book_id` = ?

Jdbc 实体:

@Table("book")
data class BookJdbcEntity(
    @Id val id: Long,
    val title: String,
    val isbn: String,
    val pages: Int,
    val authors: Set<AuthorRef> = hashSetOf()
)

@Table("book_author")
data class AuthorRef(val authorId: Long)

架构:

CREATE TABLE IF NOT EXISTS book
(
    id    bigint(20)   NOT NULL,
    title VARCHAR(100) NOT NULL,
    isbn  varchar(100) not null,
    pages INTEGER      not null,
    PRIMARY KEY (id)
);

CREATE TABLE IF NOT EXISTS book_author
(
    book_id   bigint(20) NOT NULL,
    author_id bigint(20) NOT NULL,
    constraint book_id_fk foreign key (book_id) references book (id)
);

【问题讨论】:

    标签: kotlin spring-data-jdbc


    【解决方案1】:

    使用@MappedCollection 完成

    @Table("book")
    data class BookJdbcEntity(
        @Id val id: Long,
        val title: String,
        val isbn: String,
        val pages: Int,
        @MappedCollection(idColumn="book_id")
        val authors: Set<AuthorRef> = hashSetOf()
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-10
      • 2020-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多