Java 在邮递员中发送有效负载时,是否有方法从另一个表的主键插入外键值的值?

Java 在邮递员中发送有效负载时,是否有方法从另一个表的主键插入外键值的值?,java,jpa,Java,Jpa,Author.java: package com.abc.entity; @Data @Entity @Table(name="author") public class Author { @Id @Column(nullable=false, name="id") @SequenceGenerator(sequenceName="author_seq", name="a_seq") @GeneratedValue(generator="a_seq",

Author.java

package com.abc.entity;    

@Data
@Entity
@Table(name="author")
public class Author {

    @Id
    @Column(nullable=false, name="id")
    @SequenceGenerator(sequenceName="author_seq", name="a_seq")
    @GeneratedValue(generator="a_seq", strategy=GenerationType.SEQUENCE)
    private Integer id;

    @Column(nullable=false, name="first_name")
    @NotBlank(message = "First Name is required")
    private String firstName;

    @Column(name="last_name")
    @NotNull(message = "Last Name is required")
    private String lastName;

    @Column(name = "email", unique = true)
    @NotNull(message="email cannot be null")
    @Email
    @Pattern(regexp="[A-Za-z0-9._%-+]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}")
    private String email;

    @NotNull(message="Password")
    @Size(min=8, max=16, message="Password must be >= 8 and <=16 ")
    private String password;

    @OneToMany(/*orphanRemoval = true,*/
            //mappedBy="author",
            cascade=CascadeType.ALL) 
    private List<Book> books = new ArrayList<Book>();



    /**
     * Adding a book and in turn setting it author to this object
     * @param book
     */
    public void addBook(Book book) {
        books.add(book);
        book.setAuthor(this);
    }

    /**
     * Removing a book from the author
     * @param book
     */
    public void removeBook(Book book) {
        books.remove(book);
        book.setAuthor(null);
    }
}
package com.abc.entity;

@Data
@Entity
@Table(name="book")
public class Book {
    @Id
    @Column(nullable=false, name="id")
    @SequenceGenerator(sequenceName="book_seq", name="b_seq")
    @GeneratedValue(generator="b_seq", strategy=GenerationType.SEQUENCE)
    private Long id;

    @Column(name="isbn")
    @NotNull(message = "isbn is required")
    //@Size(min=8, max=8, message="isbn must be = 8 numbers")
    private Long isbn;

    @Column(nullable=false, name="title")
    @NotNull(message = "Title is required")
    private String title;

    @Column(nullable=false, name="edition")
    @NotBlank(message = "Edition is required")
    private String edition;

    @Column(nullable=false, name="price")
    @NotNull(message = "Price is required")
    private Double price;

    @Column(nullable=false, name="date_published")
    @Pattern(regexp = "^(0[1-9]|1[0-2])([\\/])([1-9][0-9])$", message = "Must be formatted MM/YY")
    private String datePublished;

    //@ForeignKey(name="FK_COUNTRY")
    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name="author_id")//, referencedColumnName="id")
    @OnDelete(action = OnDeleteAction.CASCADE)
    private Author author;
}
我认为
book
表中的外键列将插入
author
表的主键

但是,如果我删除了指向作者主键的
referencedColumnName
属性,就会插入
null

当我添加
referencedColumnName
属性时,有一个错误指示
null
无法插入
书籍
表的外键列

java.sql.SQLIntegrityConstraintViolationException: ORA-01400: cannot insert NULL into ("SPRING"."BOOK"."AUTHOR_ID")
我创建了两个实体

  • 一位
    作者
    (他可以拥有/写很多书)[
    一本书
    ]
  • 只能属于一个作者的
    书[
    manytone
    ]
  • 当我在邮递员中发送有效负载以测试插入
    作者的
    @PostMapping
    时,
    book
    表(
    author\u id
    )中的外键,该外键应引用
    author
    表(
    id
    )的主键插入时带有
    null
    ,而不是
    作者的主键的值

    当我添加
    referencedColumnName
    时,它抛出一个异常,指示
    null
    无法插入到
    book.author\u id

    我试过:

  • 使用
    @PrimaryKeyJoinColumn
    注释
  • referencedColumnName
    属性

  • 我可以通过添加两个注释来解决我的问题:JsonManageReference和JsonBackReference

    @JsonManageReference在字段上 Author类中的私有图书列表

    及 @字段上的JsonBackReference
    在Book类中,我可以通过添加两个注释来解决我的问题:JsonManageReference和JsonBackReference

    @JsonManageReference在字段上 Author类中的私有图书列表

    及 @字段上的JsonBackReference
    私人作者图书类中的作者我认为首先你必须坚持作者然后你坚持书,你是这样做的吗?或者你想做什么?我发送了这个有效载荷{“firstName”:“Bais”,“lastName”:“Cham”,“email”:baischam1@abc.com“,”密码“:”秘密密码“,”书籍“:[{”isbn“:”12377665“,”标题“:”和平生活“,”版本“:”第一次“,”价格“:”25.45“,”日期出版“:”02/23“}]}”将插入author表中的所有字段book表中的所有字段都使用正确的值插入,但外键除外。我认为它应该有主键的值,但它有null。我认为首先你必须坚持作者,然后你坚持书,你是这样做的吗?或者你想做什么?我发送了这个有效载荷{“firstName”:“Bais”,“lastName”:“Cham”,“email”:baischam1@abc.com“,”密码“:”秘密密码“,”书籍“:[{”isbn“:”12377665“,”标题“:”和平生活“,”版本“:”第一次“,”价格“:”25.45“,”日期出版“:”02/23“}]}”将插入author表中的所有字段book表中的所有字段都使用正确的值插入,但外键除外。我认为它应该有主键的值,但它有null。