【发布时间】:2020-06-18 10:53:44
【问题描述】:
我正在尝试在 Spring Data JDBC(版本 1.1.5.RELEASE)中为父/子关系建模。到目前为止,我已经设法让插入操作正常工作,但是在读取数据时我遇到了错误。
实体看起来像这样
@Table("FATHER")
data class FatherDao(
@Id
val id: Long?,
@MappedCollection(idColumn="father_id")
val childrens: Set<ChildrenDao>
)
@Table("CHILDREN")
data class ChildrenDao(
@Id
val id: Long?,
val father: FatherDao?
)
架构如下:
CREATE TABLE father (
id INT GENERATED BY DEFAULT AS IDENTITY(START WITH 1, INCREMENT BY 1)
PRIMARY KEY (id)
);
CREATE TABLE children (
id INT GENERATED BY DEFAULT AS IDENTITY(START WITH 1, INCREMENT BY 1),
father_id INT
PRIMARY KEY (id)
);
现在我已经省略了 character_id 上的外键。
存储库很简单
@Repository
interface FatherRepository : CrudRepository<CharacterDao, Long>
为了拯救与父亲相关的孩子实体,我不调用ChildrenRepository,而是继续拯救父亲实体。
创建过程很顺利,但是在尝试获取创建的实体时,我收到以下异常
user lacks privilege or object not found: FATHER.CHILDREN_DAO in statement [SELECT CHILDREN.id AS id, father.id AS father_id FROM CHILDREN LEFT OUTER JOIN FATHER AS father ON father.children_dao = CHILDREN.id WHERE CHILDREN.father_id = ?]
我的主要问题是我无法理解FATHER.CHILDREN_DAO 的来源。我很确定这是由 FatherDao 实体中的错误映射引起的,但即使查看 Spring Data JDBC docs 中的 Sets 我也找不到任何线索。
【问题讨论】:
标签: spring spring-boot kotlin mapping spring-data-jdbc