使用Hibernate和JSP进行内部连接

时间:2015-07-11 15:49:38

标签: hibernate jsp hql inner-join dao

虽然我知道如何在SQL编辑器中执行此操作,但我有三个表需要进行内连接,我不知道它如何与Hibernate一起使用。

为了充分解释,我有一个:

  • 技能(所有问题都在哪里)
  • 部分(章节标题,如第1部分第2部分)
  • 技能组合(作为主题,运动技能,语言等)

我有单独的DAO,每个都有这样的代码 这是我的技能道:

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;

import softdev.asese.models.SkillModel;
import softdev.asese.utils.HibernateUtil;

public class SkillDao
{

    public List<SkillModel> getSkill() {
        List<SkillModel> list = new ArrayList<SkillModel>();
        Session session = HibernateUtil.openSession();
        Transaction tx = null;
        try {
            tx = session.getTransaction();
            tx.begin();
            list = session.createQuery("from SkillModel").list();
            tx.commit();
        } catch (Exception e) {
            if (tx != null) {
                tx.rollback();
            }
            e.printStackTrace();
        } finally {
            session.close();
        }
        return list;
    }
}

My Section Dao和Skillset Dao与此相同,当然不同的是查询和命名。它们都是相互连接和引用的。技能组与Section连接,Section与Skill相连。 我还有一个评估,其中技能是连接的。这将是试卷。我需要的是正确地显示每个标题,部分和问题,并按此顺序显示。到目前为止,我还没有成功,只是设法通过技能加载所有问题(没有分段和标题)

<% SkillDao sDao = new SkillDao();
    List<SkillModel> skList = sDao.getSkill();
%>

<tbody>
    <% for(SkillModel s : skList) { %>
        <tr>
            <td><%= s.getSkillName() %><br><br>
            <input type="radio" name="ans" value="Independent">Independent<br>
            <input type="radio" name="ans" value="Emerging">Emerging<br>
            <input type="radio" name="ans" value="No response">No Response<br><br><br></td>
        </tr>
    <% } %>

1 个答案:

答案 0 :(得分:0)

假设所有关系都是一对多,并且您的实体对象如下所示:

@Entity
public class SkillSet {
    @OneToMany
    private List<Section> sections;
    public List<Section> getSections() { return sections; }
}

@Entity
public class Section {
    @OneToMany
    private List<SkillModel> skillModels;
    @ManyToOne
    private SkillSet skillSet;
    public SkillSet getSkillSet() { return skillSet; }
}

@Entity
public class SkillModel {
    @ManyToOne
    private Section section;
    public Section getSection() { return section; }
}

然后可以按如下方式获得SkillSet和Section对象:

List<SkillModel> skList = sDao.getSkill();
for(SkillModel model : skList) {
    Section s = model.getSection();
    SkillSet ss = s.getSkillSet();
}