java - 在 Hibernate 中多次获取父类

标签 java spring hibernate

我有 2 个具有 OneToMany 映射的类。 有一个问题类和一个答案类。对于每个问题,表中都有 4 个答案。表格中有 10 个问题行和相应的 40 个答案行 现在,当我尝试获取列表时,它给了我 40 个问题,而不是 10 个,每个问题有 4 个重复项。

这是我的问题类:

@Entity
@Table(name = "QUESTIONS")
public class Question implements Serializable{

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "QUES_ID_SEQ")
    @SequenceGenerator(name = "QUES_ID_SEQ", sequenceName = "QUES_ID_SEQ")
    @Column(name = "QUESTION_ID")
    private Long id;

    @Column(length = 255)
    private String question;

    @OneToMany(targetEntity = Answer.class, fetch = FetchType.EAGER)
    @Cascade(CascadeType.SAVE_UPDATE)
    @JoinTable(name = "QNA",
                joinColumns = @JoinColumn(name = "QUESTION_ID"),
                inverseJoinColumns = @JoinColumn(name = "ANSWER_ID", referencedColumnName = "ANSWER_ID"))
    private List<Answer> answers;

    public Question() {}

// getters and setters ...
}

这是我的答案类:

@Entity
@Table(name = "ANSWERS")
public class Answer implements Serializable{

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ANS_ID_SEQ")
    @SequenceGenerator(name = "ANS_ID_SEQ", sequenceName = "ANS_ID_SEQ")
    @Column(name = "ANSWER_ID")
    private Long id;

    @Column(length = 255)
    private String answer;

    private boolean correct;

    public Answer() {}

// getters and setters ...
}

我正在获取这样的问题:

    @Transactional
    public List<Question> retrieveQuestions(){
        Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Question.class);
        return (List<Question>) criteria.list();
    }

最佳答案

此外,我使用以下代码解决了这个问题:

Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Question.class);
        return (List<Question>) criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list();

Criteria.DISTINCT_ROOT_ENTITY <- 这段代码帮助我获得独特的问题,而且我还使用了 FetchType.EAGER。效果很好。

关于java - 在 Hibernate 中多次获取父类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12032920/

相关文章:

java - 将 hibernate 投影结果映射到 Java POJO 模型

java - 启动画面不出现,主要 Activity 出现

java - CRUD Repository findById()返回值不同

java - 纯 Java Spring Servlet 配置中没有类型的合格 Bean

Java 数据源 SessionFactory

java - 将数据库连接到 GUI

java - java中内部类初始化的泛型数组

java - SpringBoot 在 Eclipse Luna 中通过 Spring Tool Suite 构建不工作的项目

java - 允许从键盘输入特定语言的字符

java - JPA:外部 ID 不会自动设置