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。