有没有可能的方法来映射引用表中的外键名称? (多对多)

问题描述

我尝试在基于本文的 DDD 上下文中实现多对多关系的参考表(https://spring.io/blog/2018/09/24/spring-data-jdbc-references-and-aggregates

我对 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)
);

解决方法

@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()
)