JPA在刷新之前保存瞬态实例

时间:2015-03-14 20:10:00

标签: java hibernate jpa

我有以下情况:一个学生属于一个团队,一个团队可以有很多学生。在注册时,学生不知道指定的团队,因此学生班级中的团队对象应为空。如何强制插入具有空团队对象的学生而不会出现此错误:

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();
       }
    }
}

1 个答案:

答案 0 :(得分:0)

您可以在实体管理器中使用分离选项。 entityManager.detach ---这将从您要保留或合并的主实体对象中分离该特定父对象。