如何在hibernate查询中的两个不相关的表上进行左连接

时间:2017-08-01 05:41:20

标签: spring hibernate spring-mvc mysqli

我正在尝试在hibernate查询中编写左连接。我无法完成它,因为这两个表没有任何关系。

如何在hibernate查询中进行左连接查询?

2 个答案:

答案 0 :(得分:0)

如果表格没有关系,您希望如何加入它们?他们必须以某种方式相关。

基本上你需要加入ON SOMETHING,如果你只想要两个表中的数据,那么你可以单独查询它们。

这里肯定有必要提供更多信息。

Anywho,假装我们有两个表TATB,如果TATB TA.tbData连接tbData @OneToManyRoot关系,你可以做类似的事情:

您应该从TA获取rootTA,我们在此处Join<TA, TB> fromTA = rootTA.join('tbData', JoinType.LEFT); // your business logic here 进行调用。

public void makeSite() throws IOException, BiffException {

    double latitude;
    double longitude;


    try {


        URL url = new URL("http://www.abc.....");
        InputStream inputStream = url.openStream();


        Workbook workbook = Workbook.getWorkbook(inputStream);
        Sheet sheet = workbook.getSheet(0);



        for (int Row = 1; Row < 4998; Row++) {


            Cell siteNameCell = sheet.getCell(0, Row);
            Cell latitudeCell = sheet.getCell(1, Row);
            Cell longitudeCell = sheet.getCell(2, Row);
            Cell siteDownCell = sheet.getCell(3, Row);
            Cell siteChurnCell = sheet.getCell(4,Row);
            Cell siteRevCell = sheet.getCell(7,Row);

            latitude = Double.parseDouble(latitudeCell.getContents());
            longitude = Double.parseDouble(longitudeCell.getContents());
            siteName = siteNameCell.getContents();
            siteDown = Boolean.parseBoolean(siteDownCell.getContents());
            siteChurn = siteChurnCell.getContents();
            siteRev = siteRevCell.getContents();

            towerLatLong = new LatLng(latitude, longitude);


            if (siteDown == true) {
                siteDown(towerLatLong, siteName);

            } else {
                positionSite(towerLatLong, siteName,siteChurn,siteRev);

            }

        }

    } catch(Exception e){
        toast = Toast.makeText(this, "caught :" + e.getMessage(), toast.LENGTH_SHORT);
    }

无论哪种方式,这都是非常通用的,没有任何代码信息或告诉我们你尝试了什么,这意味着接下来什么都没有。

答案 1 :(得分:0)

您可以使用执行子查询的DetachedCriteria

示例如下

DetachedCriteria personCriteria = DetachedCriteria.forClass(Person.class);
personCriteria.setProjection(Property.forName("id"));
personCriteria.add(Restrictions.eq("personLastName", "Smith"));

Criteria criteria = getSession().createCriteria(Account.class);
criteria.add(Property.forName("personId").in(personCriteria));