[英]How to set null to foreign key column in OneToMany relationship, Hibernate
[英]Hibernate Unidirectional OneToMany Relationship with Not-null Constraint in Foreign Key
我有两张这样的桌子
首先,为了数据完整性,我尝试将review
表中的course_id
外键设置course_id
空约束。
所以我为这两个表创建了带注释的类,如下所示:
@Data
@Entity
@Table(name = "course")
public class Course {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "course_id")
private int id;
@Column(name = "name")
private String name;
@OneToMany(fetch = FetchType.LAZY,cascade = CascadeType.ALL)
@JoinColumn(name = "course_id")
private List<Review> reviews;
public Course(){}
public Course(String name){
this.name = name;
}
public void addReview(Review review){
if(this.reviews == null){
this.reviews = new ArrayList<>();
}
this.reviews.add(review);
}
}
@Data
@Entity
@Table(name = "review")
public class Review {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "review_id")
private int reviewId;
@Column(name = "rating")
private int rating;
public Review(){}
public Review(int rating){
this.rating = rating;
}
}
我创建了一个简单的应用程序来向现有课程添加评论,如下面的代码:
session.beginTransaction();
// get instructor from db
Course course = session.get(Course.class, 3);
// create review
Review review1 = new Review(4);
course.addReview(review1);
// save to db
session.save(course);
session.getTransaction().commit();
但是这个程序会抛出一个错误,因为它违反了我之前在数据库中设置的非空约束
引起:org.postgresql.util.PSQLException:错误:“course_id”列中的空值违反了非空约束
但是如果删除非空约束,这个程序工作正常,因为休眠将先执行插入空值,然后更新如下值:
Hibernate: insert into review (rating) values (?)
Hibernate: update review set course_id=? where review_id=?
有没有办法让 hibernate 直接插入 course_id 值,这样我就可以保持非空约束?
谢谢!
您需要在映射中指定该列不可为nullable
:
@JoinColumn(name = "course_id", nullable = false)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.