kotlin - 有没有可能的方法来映射引用表中的外键名称?(多对多)
问题描述
我尝试根据这篇文章(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)
);
解决方案
@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()
)
推荐阅读
- javascript - 如何获得在 javascript 中单击某些内容所花费的时间?
- performance - 缓慢归档 Google Apps 脚本
- hbase - java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/client/Put
- c++ - 如何有效地将数据从 2D 主机阵列(带填充)复制到 1D 设备阵列并删除 CUDA 中的原始填充?
- javascript - 有没有办法自己将代码复制到另一个页面?
- eclipse - 如何从 maven(eclipse) 中的 avro 模式生成源代码?
- php - php 脚本错误:没有搜索结果或搜索查询上显示错误
- javascript - 使用 Marker OnPress 发送标题和描述
- skiasharp - 在 Linux 上创建 SkiaSharp XPS 文档失败
- mysql - 如何组合到不同长度的sql列?