繁体   English   中英

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.

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