Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate会话createSQLQuery_Java_Database_Hibernate - Fatal编程技术网

Java Hibernate会话createSQLQuery

Java Hibernate会话createSQLQuery,java,database,hibernate,Java,Database,Hibernate,我编写了一个函数,表klienci将与同一个表连接。我检查了sqlDeveloper中的语句,它返回正确的值,但这里有两个值​​从第一个表到另一个表(变量klient1和klient2具有相同的值)。没有外键。也许有人看到我做错了什么 public List<Klienci[]> getAllKlienci() { Session session = HibernateUtil.getSessionFactory().openSession(); Query que

我编写了一个函数,表klienci将与同一个表连接。我检查了sqlDeveloper中的语句,它返回正确的值,但这里有两个值​​从第一个表到另一个表(变量klient1和klient2具有相同的值)。没有外键。也许有人看到我做错了什么

public List<Klienci[]> getAllKlienci() {

    Session session = HibernateUtil.getSessionFactory().openSession();
    Query query = session.createSQLQuery("select k1.id, k1.nr_klienta,"
            + " k1.nr_klienta_niekod, k1.nazwa_klienta, k2.id,"
            + " k2.nr_klienta, k2.nr_klienta_niekod, k2.nazwa_klienta"
            + " from klienci k1 "
            + "left join klienci k2 on k1.nr_klienta_niekod = k2.nr_klienta");


    List<Object[]> klienci = query.list();
    // Transformacja w List<Klienci[]> 

    List<Klienci[]> returnList = new ArrayList<>();

    for (Object[] klient : klienci) {
        Klienci[] retunArray = new Klienci[2];

        Klienci klient1 = new Klienci();

        klient1.setId( ((BigDecimal)klient[0]).longValue() );
        klient1.setNrKlienta( ((BigDecimal)klient[1]).longValue() );
        klient1.setNrKlientaNiekod( ((BigDecimal)klient[2]).longValue() );
        klient1.setNazwaKlienta( (String) klient[3] );

        Klienci klient2 = new Klienci();

        klient2.setId( ((BigDecimal)klient[4]).longValue() );
        klient2.setNrKlienta( ((BigDecimal)klient[5]).longValue() );
        klient2.setNrKlientaNiekod( ((BigDecimal)klient[6]).longValue() );
        klient2.setNazwaKlienta( (String) klient[7] );

        retunArray[0] = klient1;
        retunArray[1] = klient2;

        returnList.add(retunArray);

    }

    return returnList;
}
公共列表getAllKlienci(){ Session Session=HibernateUtil.getSessionFactory().openSession(); Query Query=session.createSQLQuery(“选择k1.id,k1.nr_klienta,” +“k1.nr_klienta_niekod,k1.nazwa_klienta,k2.id,” +“k2.nr_klienta,k2.nr_klienta_niekod,k2.nazwa_klienta” +“来自Klicenti k1” +“k1.nr_klienta_niekod=k2.nr_klienta上的左连接klienci k2”); List klienci=query.List(); //Transformacja w列表 List returnList=new ArrayList(); 对于(对象[]klient:klienci){ Klienci[]retunArray=新Klienci[2]; Klienci klient1=新Klienci(); klient1.setId(((BigDecimal)klient[0]).longValue(); klient1.setNrKlienta(((BigDecimal)klient[1]).longValue(); klient1.setNrKlientaNiekod(((BigDecimal)klient[2]).longValue(); klient1.setNazwaKlienta((字符串)klient[3]); Klienci klient2=新Klienci(); klient2.setId(((BigDecimal)klient[4]).longValue(); klient2.setNrKlienta(((BigDecimal)klient[5]).longValue(); klient2.setNrKlientaNiekod(((BigDecimal)klient[6]).longValue(); klient2.setNazwaKlienta((String)klient[7]); retunArray[0]=klient1; retunArray[1]=klient2; 返回列表。添加(返回数组); } 退货清单; }
问题是,当您有hql或条件时,为什么要在自联接查询中使用sqlquery?因为没有外键,为什么不使用?您使用hibernate创建模式吗?即使不是FK,您也可以映射它。您可以给我一个示例,说明如何使用条件进行自连接吗?如果您在类中映射,则只需从表中执行