Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带Hibernate的JPA-合并性能问题_Hibernate_Jpa_Orm - Fatal编程技术网

带Hibernate的JPA-合并性能问题

带Hibernate的JPA-合并性能问题,hibernate,jpa,orm,Hibernate,Jpa,Orm,我偶然发现EntityManager的merge方法存在问题 我有这门课 @Entity public class QuestionList { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String name; @ManyToOne private UserEntity user; @OneToMany(cascade

我偶然发现
EntityManager
merge
方法存在问题

我有这门课

@Entity
public class QuestionList {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String name;

    @ManyToOne
    private UserEntity user;

    @OneToMany(cascade = CascadeType.ALL)
    private List<QuestionUnit> units = new ArrayList<QuestionUnit>();

    public List<QuestionUnit> getUnits() {
        return units;
    }

    public void setUnits(List<QuestionUnit> units) {
        this.units = units;
    }

    public Long getId() {
        return id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void addQuestionUnit(QuestionUnit QuestionUnit) {
        this.units.add(QuestionUnit);
    }

    public void setUser(UserEntity user) {
        this.user = user;
    }

    public UserEntity getUser() {
        return this.user;
    }

}
例如,在这个层次结构中有3个具体的类

@Question("openQuestion")
@Entity
public class OpenQuestion extends QuestionUnit {

    public void setQuestionContent(String questionContent) {
        this.questionContent = questionContent;
    }

    private String questionContent;

    public OpenQuestion() {
        this(null, new OpenQuestionAnswer());
    }

    public OpenQuestion(String questionContent, AnswerUnit correctAnswer) {
        super(correctAnswer);
        this.questionContent = questionContent;
    }

    public String getQuestionContent() {
        return this.questionContent;
    }

    public String getTitle() {
        return questionContent;
    }
}

@Transactional(propagation = Propagation.REQUIRED)
public void update(QuestionList questionList) {
    entityManager.merge(questionList);
}

此方法用于所有更新,因为列表处于分离状态。

它认为问题是由于使用列表而不是Set造成的

@OneToMany(cascade = CascadeType.ALL)
private List<QuestionUnit> units = new ArrayList<QuestionUnit>();
@OneToMany(cascade=CascadeType.ALL)
私有列表单位=新的ArrayList();
改为

@OneToMany(cascade = CascadeType.ALL)
private Set<QuestionUnit> units = new HashSet<QuestionUnit>();
@OneToMany(cascade=CascadeType.ALL)
私有集合单位=新HashSet();

是否可以包含QuestionUnit类和执行删除/添加对象、合并的代码?
@OneToMany(cascade = CascadeType.ALL)
private Set<QuestionUnit> units = new HashSet<QuestionUnit>();