как объединить две таблицы и получить все совпадающие записи в спящем режиме (используя сопоставление классов сущностей) - PullRequest
0 голосов
/ 16 мая 2018

У меня есть две сущности с именами FeeTerms.java и FeeTermDates.java

Я хочу получить all matched records from these two entities, используя чистую HQL

Посмотрите на сущности:

FeeTerms.java

package com.rasvek.cg.entity;
// Generated May 14, 2018 11:39:07 PM by Hibernate Tools 5.1.7.Final

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import com.fasterxml.jackson.annotation.JsonIgnore;

/**
 * FeeTerms generated by hbm2java
 */
@Entity
@Table(name = "fee_terms", catalog = "campus_guru_01")
public class FeeTerms implements java.io.Serializable {

    private Integer termId;
    private String termName;
    private String termCount;
    private Set<FeeTermDates> feeTermDateses = new HashSet<FeeTermDates>(0);
    private Set<AssocFeeTerms> assocFeeTermses = new HashSet<AssocFeeTerms>(0);

    public FeeTerms() {
    }

    public FeeTerms(String termName, String termCount, Set<FeeTermDates> feeTermDateses,
            Set<AssocFeeTerms> assocFeeTermses) {
        this.termName = termName;
        this.termCount = termCount;
        this.feeTermDateses = feeTermDateses;
        this.assocFeeTermses = assocFeeTermses;
    }

    @Id
    @GeneratedValue(strategy = IDENTITY)

    @Column(name = "term_id", unique = true, nullable = false)
    public Integer getTermId() {
        return this.termId;
    }

    public void setTermId(Integer termId) {
        this.termId = termId;
    }

    @Column(name = "term_name")
    public String getTermName() {
        return this.termName;
    }

    public void setTermName(String termName) {
        this.termName = termName;
    }

    @Column(name = "term_count", length = 45)
    public String getTermCount() {
        return this.termCount;
    }

    public void setTermCount(String termCount) {
        this.termCount = termCount;
    }  

    @OneToMany(fetch = FetchType.EAGER, mappedBy = "feeTerms")
    public Set<FeeTermDates> getFeeTermDateses() {
        return this.feeTermDateses;
    }  

    public void setFeeTermDateses(Set<FeeTermDates> feeTermDateses) {
        this.feeTermDateses = feeTermDateses;
    }

    @OneToMany(fetch = FetchType.EAGER, mappedBy = "feeTerms")
    public Set<AssocFeeTerms> getAssocFeeTermses() {
        return this.assocFeeTermses;
    }

    public void setAssocFeeTermses(Set<AssocFeeTerms> assocFeeTermses) {
        this.assocFeeTermses = assocFeeTermses;
    }

}

FeeTermDates.java

package com.rasvek.cg.entity;
// Generated May 14, 2018 11:39:07 PM by Hibernate Tools 5.1.7.Final

import static javax.persistence.GenerationType.IDENTITY;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import com.fasterxml.jackson.annotation.JsonIgnore;

/**
 * FeeTermDates generated by hbm2java
 */
@Entity
@Table(name = "fee_term_dates", catalog = "campus_guru_01")
public class FeeTermDates implements java.io.Serializable {

    private int tdmId;
    private FeeTerms feeTerms;
    private String date;

    public FeeTermDates() {
    }

    public FeeTermDates(int tdmId, FeeTerms feeTerms) {
        this.tdmId = tdmId;
        this.feeTerms = feeTerms;
    }

    public FeeTermDates(int tdmId, FeeTerms feeTerms, String date) {
        this.tdmId = tdmId;
        this.feeTerms = feeTerms;
        this.date = date;
    }

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "tdm_id", unique = true, nullable = false)
    public int getTdmId() {
        return this.tdmId;
    }

    public void setTdmId(int tdmId) {
        this.tdmId = tdmId;
    }

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "term_id", nullable = false)
    public FeeTerms getFeeTerms() {
        return this.feeTerms;  
    }  

    public void setFeeTerms(FeeTerms feeTerms) {
        this.feeTerms = feeTerms;
    }

    @Column(name = "date")
    public String getDate() {
        return this.date;
    }

    public void setDate(String date) {
        this.date = date;
    }

}

Я пытался с помощью следующего кода, но я не получаю его

String hql="select FT.termId , FT.termName , FT.termCount,FT.feeTermDateses  from FeeTerms FT ,FeeTermDates FD where  FT.termId=FD.feeTerms" ;
                query = currentSession.createQuery(hql);

                termDatesList= query.getResultList(); 

как этого добиться как чистый HQL.Я очень новичок в Hibernate и HQl.

У меня есть что-то вроде ниже в другом посте,

public List<Category> getCategoryList(int id) {
    List<Category> groupList;
    Session session = sessionFactory.getCurrentSession();
    Query query = session.createQuery("select c from Category c join fetch c.events where c.parentCategory.categoryId = 1");
    //query.setParameter("id", id);
    groupList = query.list();
    return groupList;
}

Возможно ли выполнить мой запрос, как указано выше?

1 Ответ

0 голосов
/ 18 мая 2018

Вы можете получить список Object[] со значениями, которые вы хотите.Как:

String hql="select FT.termId , FT.termName , FT.termCount, FT.feeTermDateses  from FeeTerms FT, FeeTermDates FD where FT.termId = FD.feeTerms.id";

Query query = currentSession.createQuery(hql);
List<Object[]> results = query.getResultList(); 
for (Object[] obj : results) {
    Integer termId = obj[0];
    String termName = obj[1];
    String termCount = obj[2];
    Set<FeeTermDates> feeTermDates  = obj[4];
}

Но я мог бы предложить лучшую версию:

String hql = "SELECT ft FROM FeeTerms ft JOIN ft.feeTermDateses feeTermDateses";
Query query = currentSession.createQuery(hql);
List<FeeTerms> results = query.getResultList(); 

Это уже приносит вам все FeeTerms, которые имеют FeeTermDates.

...