簡體   English   中英

休眠聯接中的多對一聯接

[英]Many-to-one in hibernate join

我想在Entry實體和Project實體之間建立連接。 我的目標是按分配的項目ID搜索條目。 我輸入項目ID,並希望獲得分配了該項目的所有條目。

這是我在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;

}

假設您已經定義了NamedQuery批注,那么我想您打算在查詢時使用它們。 在這里,您可以找到所需的示例。 否則,如果您希望使用CriteriaQuery構造查詢,則可以采用以下示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM