我如何获得属于一项调查的所有问题?
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();
首先,我对数据库的所有东西都不太熟悉,所以请怜悯我。 我有 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
.
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();