我有以下情况:一个学生属于一个团队,一个团队可以有很多学生。在注册时,学生不知道指定的团队,因此学生班级中的团队对象应为空。如何强制插入具有空团队对象的学生而不会出现此错误:
org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : com.af.domain.Student.team -> com.af.domain.Team
我尝试了cascade=CascadeType.ALL
,但它也在数据库中宣传了一个新团队。
学生班
@Entity
@Table(name = "student")
public class Student implements DomainModel{
@Id
@GeneratedValue
private Integer idStudent;
private String firstname;
private String lastname;
private String username;
private String password;
@ManyToOne
@JoinColumn(name="idTeam", nullable=true)
private Team team;
}
团队课
@Entity
@Table
public class Team implements DomainModel{
@Id
@GeneratedValue
private Integer idTeam;
private String teamName;
@OneToMany(mappedBy="team")
private Set<Student> students;
}
持久性等级
public class GenericDAOImpl<T extends DomainModel> implements GenericDAO<T> {
public void save(T object) {
EntityManager entityManager = entityManagerFactory
.createEntityManager();
entityManager.getTransaction().begin();
try {
entityManager.persist(object);
} catch(NullPointerException ex){
ex.printStackTrace();
}finally {
entityManager.getTransaction().commit();
entityManager.close();
}
}
}
答案 0 :(得分:0)
您可以在实体管理器中使用分离选项。 entityManager.detach ---这将从您要保留或合并的主实体对象中分离该特定父对象。