我正在尝试在hibernate查询中编写左连接。我无法完成它,因为这两个表没有任何关系。
如何在hibernate查询中进行左连接查询?
答案 0 :(得分:0)
如果表格没有关系,您希望如何加入它们?他们必须以某种方式相关。
基本上你需要加入ON SOMETHING,如果你只想要两个表中的数据,那么你可以单独查询它们。
这里肯定有必要提供更多信息。
Anywho,假装我们有两个表TA
和TB
,如果TA
与TB
TA.tbData
连接tbData
@OneToMany
是Root
关系,你可以做类似的事情:
您应该从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));