簡體   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