原生SQL语句的联表查询问题

demon_z 发布于 2014/08/19 12:10
阅读 1K+
收藏 0

@Koala_考拉 你好,想跟你请教个问题:

关于联表查询,遇到困扰

很简单的语句:查询条件一样

1能正确执行,2报错org.hibernate.MappingException: No Dialect mapping for JDBC type: -9

需要像2这样返回分别两个表的字段,请问该如何写这个SQL语句

1:  select a.sex            from XXX a left  join ZZZZ b on   a.id_dept=b.id  where 1 = 1

2:  select a.sex,b.name from XXX a left  join ZZZZ b on   a.id_dept=b.id  where 1 = 1

加载中
0
d
demon_z

使用了koala提供的 createSqlQuery方法
Page<Usertest> pages = getQueryChannelService()
. createSqlQuery(sql.toString()).setParameters(conditionVals)
.setPage(currentPage, pageSize).pagedList();
0
Koala_考拉
Koala_考拉

这个例子是没问题的

List<Object[]> obj = getQueryChannelService().createSqlQuery("SELECT ksl.ID, ks.`NAME` from ks_resource_lineassignment ksl LEFT JOIN ks_resource ks ON ksl.CHILD_ID = ks.ID where 1=1").list();

System.out.println(obj.size() + "===========");
for (Object[] each : obj) {
System.out.println(each[0] + "====");
System.out.println(each[1] + "====");
}

0
d
demon_z

引用来自“Koala_考拉”的评论

这个例子是没问题的

List<Object[]> obj = getQueryChannelService().createSqlQuery("SELECT ksl.ID, ks.`NAME` from ks_resource_lineassignment ksl LEFT JOIN ks_resource ks ON ksl.CHILD_ID = ks.ID where 1=1").list();

System.out.println(obj.size() + "===========");
for (Object[] each : obj) {
System.out.println(each[0] + "====");
System.out.println(each[1] + "====");
}

String字段 ks.`NAME`,是要加单引号吗
0
hlevel
hlevel

hibernate HQL不认得 left  join  之类的关键字,无法解析。。改成

select a.sex,b.name from XXX a ,ZZZZ b where a.id_dept=b.id
虽然知道你用左连接。用其他语句实现把.
0
d
demon_z

引用来自“hlevel”的评论

hibernate HQL不认得 left  join  之类的关键字,无法解析。。改成

select a.sex,b.name from XXX a ,ZZZZ b where a.id_dept=b.id
虽然知道你用左连接。用其他语句实现把.

找到原因,错误提示说数据表的字段无法识别。发现b.name对应的sqlserver数据表位nvarchar

改为varchar,就不报错,可以执行了。

select a.sex,b.name


返回顶部
顶部