【问题标题】:Inner Join in hql and how to iteratehql中的内部连接以及如何迭代
【发布时间】:2017-06-24 06:47:03
【问题描述】:

我需要一些帮助 我对休眠有新的认识 我已经使用内部联接加入了三个表,它们都具有一对一的映射 我在列表中得到结果,但是,如何在该列表中迭代。我已经尝试使用迭代器,但没有任何帮助请帮助我这里是代码 sn-p。

@Entity
public class Laptop {
@Id
private int lid;
private String lname;
//getters and setter

@Entity
public class Validity{

@Id
private int lid;
private String validitydate;
//getters and setter
@Entity
public class Student {

@Id
private int lid;
private int rollno;
private String name;
private int marks;


@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name="lid")
private Laptop laptop;

@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="lid")
private Validity validity;
//getters and setters

询问我正在解雇

  String hql = "Select s from Student s inner join s.laptop left join 
   s.validity where s.lid = 1 and s.marks = 45";


    Query query = session.createQuery(hql);

    List<Object[]> list = query.list();

    Iterator it = list.iterator();
    Object[] obj = list.toArray();
    while(it.hasNext())
    {
        Object ob = (Object)it.next();
        Student s = (Student)ob;
        System.out.println("Student id is "+s.getLid());
        Laptop l = (Laptop)ob; // gives me error here cannot cast laptop to 
        student
        System.out.println("laptop id is "+l.getLid());
        System.out.println("laptop name is "+l.getLname());

    }

【问题讨论】:

    标签: hibernate join iterator hql one-to-one


    【解决方案1】:

    您的查询是

    Select s from Student s where ...
    

    所以它选择了 Student 的实例。

    所以结果是List&lt;Student&gt;,而不是List&lt;Object[]&gt;

    使用正确的类型,并使用类型化查询:

    Query<Student> query = session.createQuery(hql, Student.class);
    List<Student> list = query.list();
    for (Student student : list) {
        ...
    }
    

    【讨论】:

    • 但我想要笔记本电脑类和有效性类的详细信息
    • 那么学生有一台笔记本电脑和一个有效期字段是一件好事。因此,您可以使用 student.getLaptop() 来获取学生的笔记本电脑。你想不明白类和对象的原理。鉴于您的问题和您发布的代码,我认为您现在使用 Hibernate 还为时过早。首先学习 Java 和 OO 的基础知识。例如,您应该知道一个对象不能同时是学生和笔记本电脑,但这就是您的代码所假设的。
    • 感谢您的帮助,这就是我所做的……解决我的问题
    【解决方案2】:
        Iterator it = list.iterator();
        Object[] obj = list.toArray();
        while(it.hasNext())
        {
            Object ob = (Object)it.next();
            Student s = (Student)ob;
            System.out.println("Student id is "+s.getLid());
            Laptop l = s.getLaptop();
            System.out.println("laptop id is "+l.getLid());
            System.out.println("laptop name is "+l.getLname());
            Validity v = s.getValidity();
            System.out.println("Validity id is "+v.getLid());
            System.out.println("Validity Date is "+v.getValiditydate());
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-04
      • 1970-01-01
      • 1970-01-01
      • 2020-10-27
      • 2016-12-27
      相关资源
      最近更新 更多