繁体   English   中英

父实体的主键未在子实体中存储为外键

[英]Primary key of Parent Entity not stored as Foreign Key in Child Entity

我在spring数据Jpa中使用OneToMany关系并使用postMan测试api

@Entity
@Table(name = "book_category")
public class BookCategory {
ParentEntity
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "bookCat_id")
    private Long id;

    private String name;

    @OneToMany(cascade = CascadeType.ALL, mappedBy="bookCategory")
    private Set<Book> books;

    public BookCategory(String name, Set<Book> books) {
        this.name = name;
        this.books = books;
    }

// getter and setter

}

ChildEntity


    @Entity
    @Table(name = "book")
    public class Book {

        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "book_id")
        private Long bookId;

        private String name;

        @ManyToOne(cascade = CascadeType.PERSIST)
        @JoinColumn(name = "bookCat_id")
        BookCategory bookCategory;

        public Book() {

        }

    //getter  and Setter

    }

ControllerClass

@RestController
@RequestMapping(value = "/bookCategory")
public class BookController {

    @Autowired
    BookCategoryRepository bookCategoryRepository;

    @Autowired
    BookRepository bookRepository;

    @PostMapping("/addBookCategory")
    public BookCategory savePerson(@Valid @RequestBody BookCategory bookCategory){
        return bookCategoryRepository.save(bookCategory);
    }
}

从邮递员那里打电话给Rest Api并传递json为

{

    "name":"Category 1",
    "books":[
          {"name" : "Hello Koding 1"},
          {"name":"Hello Koding 2"}
        ]
} 

以下查询是通过hibernate执行查询也是正确的,而我正在调用休息点的东西Hibernate:插入book_category(name)值(?)Hibernate:插入book(book_cat_id,name)值(?,?)

它没有插入book_cat_id,在book_cat_id中传递null,因此null获取存储

数据库中存储的数据book_category数据库中的父表

book(ChildTable) 书(ChildTable)我想得到Child Table就像我想要这样的表

问题是您没有在子对象中设置父级。 代码中的某处你应该调用

public void setBookCategory(BookCategory bookCategory) { ... }

Book实体的方法。

我建议在使用控制器DTO的,并将它们映射到业务层实体,如使用peristent实体来解决这一问题作为HTTP请求的参数可能会导致严重的安全漏洞作为解释在这里

编辑:或者,甚至认为我不鼓励这个解决方案是修改像这样的savePerson方法

@PostMapping("/addBookCategory")
public BookCategory savePerson(@Valid @RequestBody BookCategory bookCategory){
    bookCategory.getBooks().forEach(book -> book.setBookCategory(bookCategory));
    return bookCategoryRepository.save(bookCategory);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM