是否可以在hibernate spring中级联none
Is it possible to cascade none in hibernate spring
我是 Hibernate 的新手并且 Spring,
我有一个对象 Course
和一个对象 User
。
因此,逻辑是管理员可以使用现有用户创建课程,然后
现有用户将已经拥有现有角色。
我的 Course
对象的存储库 class 扩展 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
但找不到导入/依赖项。目前,它一直强迫我将导致重复数据的用户和角色对象保存到数据库中。
课程class:
@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
}
用户class:
@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;
}
角色class:
@Entity
public class Role {
@Id
private long role_id;
private String role_name;
private String role_desc;
}
I am not sure how to not save the User and Role object which already exists in the database.
您可以通过以下方式调用 EntityManager.getReference 来获取实体引用而不初始化其数据:
Course course = new Course();
course.setUser( entityManager.getReference( User.class, userId) );
// ...
courseRepository.save(course);
我是 Hibernate 的新手并且 Spring,
我有一个对象 Course
和一个对象 User
。
因此,逻辑是管理员可以使用现有用户创建课程,然后 现有用户将已经拥有现有角色。
我的 Course
对象的存储库 class 扩展 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
但找不到导入/依赖项。目前,它一直强迫我将导致重复数据的用户和角色对象保存到数据库中。
课程class:
@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
}
用户class:
@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;
}
角色class:
@Entity
public class Role {
@Id
private long role_id;
private String role_name;
private String role_desc;
}
I am not sure how to not save the User and Role object which already exists in the database.
您可以通过以下方式调用 EntityManager.getReference 来获取实体引用而不初始化其数据:
Course course = new Course();
course.setUser( entityManager.getReference( User.class, userId) );
// ...
courseRepository.save(course);