【发布时间】:2021-05-18 23:53:12
【问题描述】:
我尝试根据这篇文章(https://spring.io/blog/2018/09/24/spring-data-jdbc-references-and-aggregates)在DDD上下文中实现多对多关系的引用表
我对 JdbcEntity 有不同的命名,因为我有另一个名为 Book 的域实体来处理域逻辑。 (我决定将Domain model 和Persistence 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)
);
【问题讨论】: