问题描述
我尝试在基于本文的 DDD 上下文中实现多对多关系的参考表(https://spring.io/blog/2018/09/24/spring-data-jdbc-references-and-aggregates)
我对 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)
);
解决方法
@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()
)