Java HibernateSQL查询有两个相同的表,并且应该返回名称相同但值不同的列,但返回相同的值
我必须返回两个应用程序名source和target,因此我加入应用程序表以获取名称。。下面是源代码。当我运行它时,我得到以下查询Java HibernateSQL查询有两个相同的表,并且应该返回名称相同但值不同的列,但返回相同的值,java,spring,oracle,hibernate,jpa,Java,Spring,Oracle,Hibernate,Jpa,我必须返回两个应用程序名source和target,因此我加入应用程序表以获取名称。。下面是源代码。当我运行它时,我得到以下查询 select distinct app_source,target,zao.app_name,dependency,zat.app_name from zapp_dependency zd join zapplication zao on zao.csi_id=zd.app_source join zapplication zat on zat.csi_id=zd.
select distinct app_source,target,zao.app_name,dependency,zat.app_name from zapp_dependency zd join zapplication zao on zao.csi_id=zd.app_source
join zapplication zat on zat.csi_id=zd.target
当我在oracle sql developer中运行时,我得到了期望的结果,即源和目标应用程序名称不同,但在hibernate中得到的结果相同。。有人能帮忙吗
try
{
Session session=HibernateUtil.currentSession();
String sql="select distinct app_source,target,zao.app_name,dependency,zat.app_name from zapp_dependency zd join zapplication zao "
+ "on zao.csi_id=zd.app_source"
+ " join zapplication zat on zat.csi_id=zd.target ";
ob=session.createSQLQuery(sql).list();
for(Object[] ab:ob)
{
ZAppDependencyDTO elem=new ZAppDependencyDTO();
elem.setSource(ab[0]==null?"":ab[0].toString());
elem.setTarget(ab[1]==null?"":ab[1].toString());
elem.setDependency(ab[3]==null?' ':ab[3].toString().trim().charAt(0));
elem.setId(elem.getSource()+"@@@"+elem.getTarget()+"@@@"+elem.getDependency());
elem.setSourcename(ab[2]==null?"":ab[2].toString());
System.out.println(ab[2].toString());
elem.setTargetname(ab[4]==null?"":ab[4].toString());
System.out.println(ab[4].toString());
dto.add(elem);
}
}
catch(Exception ex)
{
count=0;
ex.printStackTrace();
tx.rollback();
}
两个表中的相同列名似乎有问题 还提到 您能否尝试使用以下命令,使用{}指定特定的别名
两个表的相同列名应使用别名
select distinct app_source,target,zao.app_name as zao_app_name ,zat.app_name as zat_app_name ...
将我的查询更改为
String sql="select distinct app_source,target,zao.app_name as source_name,dependency,zat.app_name as target_name from zapp_dependency zd join zapplication zao "
+ "on zao.csi_id=zd.app_source"
+ " join zapplication zat on zat.csi_id=zd.target "
它基本上起到了别名的作用Thnks很多,因为这个概念认为查询不起作用,但它帮助我解决了我的问题,有这个HQL,也有本地查询,这可能是查询不起作用的原因。但很好,你找到了解决办法。
String sql="select distinct app_source,target,zao.app_name as source_name,dependency,zat.app_name as target_name from zapp_dependency zd join zapplication zao "
+ "on zao.csi_id=zd.app_source"
+ " join zapplication zat on zat.csi_id=zd.target "