java - Spring 数据Jdbc : Name must not be empty error on nested one to many relationship implementation

标签 java spring-data-jdbc

我正在使用 Spring Boot 2.2.0.RELEASEspring-data-jdbc 1.1.0.RELEASE

尝试使用 spring-data-jdbc 实现嵌套的一对多关系。

一本书有很多章,每章又包含很多部分。


public class Book {

    private Set<Chapter> chapters = new HashSet<>();

    public Set<Chapter> getChapters(){
        return chapters;
    }
}

public class Chapter{
    public Set<Part> getParts() {
        return parts;
    }

    private Set<Part> parts = new HashSet<>();
}

public class Part { }


public interface BookCrudRepository extends CrudRepository<Book, Long> {
    public Set<Book> findAll();
}


@Autowired
    BookRepository bookRepository;

@GetMapping("/book")
public Set<Book> getBookList() {
    return bookCrudRepository.findAll();
}
CREATE TABLE IF NOT EXISTS book (
    id SERIAL PRIMARY KEY,
 );

CREATE TABLE IF NOT EXISTS chapter (
    id SERIAL PRIMARY KEY,
    book_id int references book(id),
 );

CREATE TABLE IF NOT EXISTS part (
    chapter_id int references chapter(id),
);

如果没有部分,findAll 将返回所有包含章节的书籍。使用 Part 时,我收到此运行时错误:

java.lang.IllegalArgumentException: Name must not be empty!
    at org.springframework.util.Assert.hasText(Assert.java:284) ~[spring-core-5.2.0.RELEASE.jar:5.2.0.RELEASE]
    at org.springframework.data.relational.domain.Identifier.withPart(Identifier.java:116) ~[spring-data-relational-1.1.0.RELEASE.jar:1.1.0.RELEASE]
    at org.springframework.data.jdbc.core.convert.BasicJdbcConverter$ReadingContext.resolveRelation(BasicJdbcConverter.java:349) ~[spring-data-jdbc-1.1.0.RELEASE.jar:1.1.0.RELEASE]
    at org.springframework.data.jdbc.core.convert.BasicJdbcConverter$ReadingContext.readOrLoadProperty(BasicJdbcConverter.java:333) ~[spring-data-jdbc-1.1.0.RELEASE.jar:1.1.0.RELEASE]
    at org.springframework.data.jdbc.core.convert.BasicJdbcConverter$ReadingContext.populateProperties(BasicJdbcConverter.java:322) ~[spring-data-jdbc-1.1.0.RELEASE.jar:1.1.0.RELEASE]
    at org.springframework.data.jdbc.core.convert.BasicJdbcConverter$ReadingContext.createInstanceInternal(BasicJdbcConverter.java:458) ~[spring-data-jdbc-1.1.0.RELEASE.jar:1.1.0.RELEASE]
    at org.springframework.data.jdbc.core.convert.BasicJdbcConverter$ReadingContext.mapRow(BasicJdbcConverter.java:307) ~[spring-data-jdbc-1.1.0.RELEASE.jar:1.1.0.RELEASE]
    at org.springframework.data.jdbc.core.convert.BasicJdbcConverter.mapRow(BasicJdbcConverter.java:252) ~[spring-data-jdbc-1.1.0.RELEASE.jar:1.1.0.RELEASE]
    at org.springframework.data.jdbc.core.convert.EntityRowMapper.mapRow(EntityRowMapper.java:68) ~[spring-data-jdbc-1.1.0.RELEASE.jar:1.1.0.RELEASE]
    at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:94) ~[spring-jdbc-5.2.0.RELEASE.jar:5.2.0.RELEASE]

最佳答案

根据您发布的来源,您的实体都没有 ID,尽管架构显示 BookChapter 可能有一个 ID。

如果

Page 应该存储在 Set 中,则也需要一个。

基本上,聚合根 (Book) 和存储在 Set 中的所有实体都需要一个 id。

直接引用或通过ListMap引用的实体不需要ID,因为可以从引用实体加上列表索引或 map 键获取ID。

关于java - Spring 数据Jdbc : Name must not be empty error on nested one to many relationship implementation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58524681/

相关文章:

java - 使用 spring data jdbc 将 Java Map 持久保存为 PostgreSQL jsonb

java - PagingAndSortingRepository 方法在与 spring data jdbc 一起使用时抛出错误

java - 如何在 Android 中进行大数数学运算?

Java, "Variable name"无法解析为变量

java - 我的 Produce Consumer 挂起

java - Spring Data JDBC org.springframework.data.mapping.MappingException : Could not read value rental_movie from result set

java - Maven 全局插件配置

java - 执行类时找不到 Jar

java - 如何使用 spring-data-jdbc 插入不可变记录

无法识别Spring Data JDBC Firebird方言