hibernate中的多对一连接

v1uwarro  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(427)

我想在条目实体和项目实体之间建立连接。我的目标是按分配的项目id搜索条目。我输入项目id并希望获得分配了此项目的所有条目。
这是我在道课上的方法

  1. @Override
  2. public PageWrapper<Entry> getListOfEntries(EntrySC sc) {
  3. public PageWrapper<Entry> getListOfEntries(EntrySC sc) {
  4. CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
  5. CriteriaQuery<Entry> cq = cb.createQuery(Entry.class);
  6. Root<Entry> entry = cq.from(Entry.class);
  7. //Join<Entry,Project> join = cq.from(Entry.class).join(Entry_.project);
  8. cq.select(entry);
  9. PageWrapper<Entry> results = new PageWrapper<>();
  10. results.setResults(em.createQuery(cq).getResultList());
  11. results.setRows(em.createQuery(cq).getResultList().size());
  12. return results;
  13. }

这是我的进入实体和项目实体

  1. @Entity
  2. @Table(name = "Entry")
  3. @NamedQueries({
  4. @NamedQuery(name="Entry.findAll", query="SELECT e FROM Entry e ORDER BY e.date DESC"),
  5. @NamedQuery(name="Entry.findByID", query="SELECT e FROM Entry e WHERE e.id = :entryID"),
  6. @NamedQuery(name="Entry.findByUserID", query="SELECT e FROM Entry e WHERE e.user.id = :userID ORDER BY e.date DESC"),
  7. @NamedQuery(name="Entry.findByProjectID", query="SELECT e FROM Entry e WHERE e.project.id = :projectID")
  8. })
  9. public class Entry extends BaseEntityAudit {
  10. @ManyToOne(fetch = FetchType.LAZY, optional = false)
  11. @JoinColumn(name = "PROJECT_ID", nullable = false)
  12. @JsonIgnore
  13. private Project project;
  14. @ManyToOne(fetch = FetchType.LAZY, optional = false)
  15. @JoinColumn(name = "USER_ID", nullable = false)
  16. @JsonIgnore
  17. private User user;
  18. @Column(name = "COMMENT", nullable = true)
  19. private String comment;
  20. @Column(name = "HOURS", nullable = false)
  21. private BigDecimal hours;
  22. @Column(name = "DATE", nullable = false)
  23. @Temporal(javax.persistence.TemporalType.DATE)
  24. private Date date;
  25. public Entry(){}
  26. //setters and getters
  27. }
  28. @Entity
  29. @Table(name="Project")
  30. @NamedQueries({
  31. @NamedQuery(name="Project.findAll", query="SELECT p FROM Project p"),
  32. @NamedQuery(name="Project.findByID", query="SELECT p FROM Project p WHERE p.id = :projectID")
  33. })
  34. public class Project extends BaseEntityAudit {
  35. @Column(name="NAME", nullable=false)
  36. private String name;
  37. @Column(name="START_DATE", nullable=false)
  38. @Temporal(TemporalType.DATE)
  39. private Date startDate;
  40. @Column(name="DUE_DATE")
  41. @Temporal(TemporalType.DATE)
  42. private Date dueDate;
  43. @Column(name="COMMENT", nullable=true)
  44. private String comment;
  45. public Project(){
  46. }
  47. //setters and getters
  48. }

项目类不知道条目。也许这就是问题所在?
///////////////////////////////////////////////////////////////////
编辑:
我根据文档创建了join-base。但我不清楚。因为如果我取消注解这个,我会得到空指针异常。我还创建了元模型类

  1. @StaticMetamodel(Entry.class)
  2. public class Entry_ {
  3. public static volatile SingularAttribute<Entry,Project> project;
  4. public static volatile SingularAttribute<Entry,User> user;
  5. public static volatile SingularAttribute<Entry, String> comment;
  6. public static volatile SingularAttribute<Entry,BigDecimal> hours;
  7. public static volatile SingularAttribute<Entry,Date> date;
  8. }
aydmsdu9

aydmsdu91#

前提是您已经定义了 NamedQuery 注解,我想您打算在查询时使用它们。在这里你可以找到你需要的例子。否则,如果您希望使用 CriteriaQuery 你可以采用这些例子。

相关问题