首页 > 解决方案 > 有没有可能的方法来映射引用表中的外键名称?(多对多)

问题描述

我尝试根据这篇文章(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)
);

标签: kotlinspring-data-jdbc

解决方案


完成了@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()
)

推荐阅读