Я хочу сделать соединение между объектом Entry и объектом Project.Моя цель - искать записи по назначенному идентификатору проекта.Я ввожу идентификатор проекта и хочу получить все записи, которым назначен этот проект.
Это мой метод в классе DAO
@Override
public PageWrapper<Entry> getListOfEntries(EntrySC sc) {
public PageWrapper<Entry> getListOfEntries(EntrySC sc) {
CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
CriteriaQuery<Entry> cq = cb.createQuery(Entry.class);
Root<Entry> entry = cq.from(Entry.class);
//Join<Entry,Project> join = cq.from(Entry.class).join(Entry_.project);
cq.select(entry);
PageWrapper<Entry> results = new PageWrapper<>();
results.setResults(em.createQuery(cq).getResultList());
results.setRows(em.createQuery(cq).getResultList().size());
return results;
}
И это моя сущность Entry и сущность Project
@Entity
@Table(name = "Entry")
@NamedQueries({
@NamedQuery(name="Entry.findAll", query="SELECT e FROM Entry e ORDER BY e.date DESC"),
@NamedQuery(name="Entry.findByID", query="SELECT e FROM Entry e WHERE e.id = :entryID"),
@NamedQuery(name="Entry.findByUserID", query="SELECT e FROM Entry e WHERE e.user.id = :userID ORDER BY e.date DESC"),
@NamedQuery(name="Entry.findByProjectID", query="SELECT e FROM Entry e WHERE e.project.id = :projectID")
})
public class Entry extends BaseEntityAudit {
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "PROJECT_ID", nullable = false)
@JsonIgnore
private Project project;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "USER_ID", nullable = false)
@JsonIgnore
private User user;
@Column(name = "COMMENT", nullable = true)
private String comment;
@Column(name = "HOURS", nullable = false)
private BigDecimal hours;
@Column(name = "DATE", nullable = false)
@Temporal(javax.persistence.TemporalType.DATE)
private Date date;
public Entry(){}
//setters and getters
}
@Entity
@Table(name="Project")
@NamedQueries({
@NamedQuery(name="Project.findAll", query="SELECT p FROM Project p"),
@NamedQuery(name="Project.findByID", query="SELECT p FROM Project p WHERE p.id = :projectID")
})
public class Project extends BaseEntityAudit {
@Column(name="NAME", nullable=false)
private String name;
@Column(name="START_DATE", nullable=false)
@Temporal(TemporalType.DATE)
private Date startDate;
@Column(name="DUE_DATE")
@Temporal(TemporalType.DATE)
private Date dueDate;
@Column(name="COMMENT", nullable=true)
private String comment;
public Project(){
}
//setters and getters
}
Класс проекта не знает о записях.Может в этом проблема?
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Редактировать:
Я создал объединенную базу по документации.Но это не ясно для меня.Потому что, если я раскомментирую это, я получу исключение нулевого указателя.Я также создал класс метамодели
@StaticMetamodel(Entry.class)
public class Entry_ {
public static volatile SingularAttribute<Entry,Project> project;
public static volatile SingularAttribute<Entry,User> user;
public static volatile SingularAttribute<Entry, String> comment;
public static volatile SingularAttribute<Entry,BigDecimal> hours;
public static volatile SingularAttribute<Entry,Date> date;
}