java—在HibernateSpring中是否可以级联none

rta7y2nd  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(255)

我不熟悉冬眠和Spring,
我有个目标 Course 和对象 User .
因此,逻辑是管理员可以使用现有用户创建课程,而现有用户将已经拥有现有角色。
我的存储库类 Course 对象扩展 CrudRepository . 为了保存课程对象,我使用

courseRepository.save(course);

但我有一个问题,错误如下:

org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : com.example.project.model.Course.user -> com.example.project.model.User

我不知道怎样才能不救这个孩子 User 以及 Role 数据库中已存在的对象。我试着用 CascadeType.None 但我找不到导入/依赖项。目前,它不断迫使我保存到数据库中的用户和角色对象,导致重复的数据。
课程类别:

@Entity
public class Course {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long course_id;
    private String course_name;
    private String course_desc;

    @ManyToOne(cascade = {})
    @JoinColumn(name="teacher_id", referencedColumnName = "user_id")
    private User user;

    //setter & getter
}

用户类别:

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long user_id;
    private String username;
    private String password;
    private String firstname;
    private String lastname;
    private String email;
    private String identificationNumber;

    @ManyToOne(cascade = {})
    @JoinColumn(name="role_id")
    private Role role;
}

角色类:

@Entity
public class Role {

    @Id
    private long role_id;
    private String role_name;
    private String role_desc;
}
kkbh8khc

kkbh8khc1#

我不知道如何不保存数据库中已经存在的用户和角色对象。
您可以通过以下方式调用entitymanager.getreference来获取实体引用,而无需初始化其数据:

Course course = new Course();
course.setUser( entityManager.getReference( User.class, userId) );
// ...
courseRepository.save(course);

相关问题