繁体   English   中英

JPA在刷新之前保存临时实例

[英]JPA save the transient instance before flushing

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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