我如何获得属于一项调查的所有问题?

How do i get all Questions belonging to one Survey?

首先,我对数据库的所有东西都不太熟悉,所以请怜悯我。 我有 2 个实体 类。调查和问题。

@Entity
@Table
public class Survey {

    @Id
    @Column(name="ID")
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;

    private String surveyName;

    private int questionCount;

    private String owner;

    private int participant;

    @OneToMany(mappedBy= "survey", cascade=CascadeType.ALL)
    private List<Question> question = new ArrayList<Question>(); 

@Entity
@Table
public class Question {

    @Id
    @Column(name="ID")
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;

    private String question;

    private int index;

    @ManyToOne
    @JoinTable
    private Survey survey;    

我很难编写正确的查询来获取属于使用 HQL 的一项调查的所有问题。也许有人可以给我一个正确方向的提示,或者给我一个如何去做的例子。

有两种方法可以得到一个Survey的所有Question

1。遍历托管关联

您塑造了一个 bidirectional many-to-one association。因此,如果您已经加载了 Survey 实体,则可以对该实体调用 getSurvey() 方法。然后,Hibernate 将生成并执行查询以获取 Survey 实体。
optimize that if you're experiencing n+1 select issues有几种方法。但这是一个更高级的话题。

2。实施查询

如果您不需要 Survey 实体,最好使用仅加载 Survey 实体的 JPQL 查询。 JPQL 的语法与 SQL 非常相似,我在 guide to JPQL.
中对其进行了非常详细的解释 这是与 Query.

关联的 returns 所有 Survey 实体的查询
TypedQuery<Question> q = em.createQuery("SELECT q FROM Survey s JOIN s.question q WHERE s.id = :id", Question.class);
q.setParameter("id", id);
q.getResultList();