当前位置: 代码迷 >> Java相关 >> sql执行正常,用hibernate错误:SQLException: ORA-00918: 未明确定义列;各位大神,多谢啦~
  详细解决方案

sql执行正常,用hibernate错误:SQLException: ORA-00918: 未明确定义列;各位大神,多谢啦~

热度:7   发布时间:2016-04-22 21:05:39.0
sql执行正常,用hibernate异常:SQLException: ORA-00918: 未明确定义列;各位大神,在线等,急,谢谢啦~~
各位大神,在线等,急,谢谢啦~~
之前hibernate执行都ok,我修改了sql,然后就报异常,但是打印出来的sql在数据库工具里执行正常,也有结果,日志打印

异常信息如下:
 org.springframework.jdbc.BadSqlGrammarException: Hibernate operation: could not execute query; bad SQL grammar [select m.id, m.sheetId, m.title, to_char(m.sheetAcceptLimit, 'yyyy-mm-dd hh24:mi:ss'),m.mainAlarmId,m.mainAlarmStaId, m.mainOriAlarmId, m.mainNetSortOne, m.mainNetSortTwo, to_char(m.sheetCompleteLimit, 'yyyy-mm-dd hh24:mi:ss'),to_char(m.mainCompleteLimitT1, 'yyyy-mm-dd hh24:mi:ss'),to_char(m.mainCompleteLimitT2, 'yyyy-mm-dd hh24:mi:ss'),to_char(m.mainFaultGenerantTime, 'yyyy-mm-dd hh24:mi:ss'),m.mainFaultGenerantCity, m.mainFaultGenerantCounty,m.mainFaultGenerantVillage, m.mainTenanceMode, m.mainNetName,m.sendTime,m.mainAlarmLevel,m.mainExtend1,m.mainAlarmSolveDate,m.mainIsPretreatment,m.mainEquipmentType, m.mainEquipmentFactory,link1.linkFaultReasonSort, link1.linkFaultReasonSubsection,link1.operateUserId,link1.linkDealStep,link1.linkAppraise,link1.activeTemplateId,link1.operateTime,link1.linkFaultDealResult,d2.operateUserId, d2.operateType  from centralcommonfault_main m  left join (select l.mainId,l.operateUserId,l.linkDealStep,l.operateTime,l.operateDeptId,dict1.dictname  as linkFaultReasonSort,  dict2.dictname  as linkFaultReasonSubsection,l.linkAppraise,l.activeTemplateId,l.linkFaultDealResult from centralcommonfault_link l  left join (select dict.dictname, dict.dictid from taw_system_dicttype dict) dict1 on dict1.dictid = l.linkFaultReasonSort  left join (select dict.dictname, dict.dictid from taw_system_dicttype dict) dict2 on dict2.dictid = l.linkFaultReasonSubsection  where l.operatetype = 46 and l.operateTime = (select max(l1.operateTime) from centralcommonfault_link l1 where l1.operatetype = 46  and l1.mainId = l.mainId)) link1 on m.id = link1.mainId left join  (select l.mainId,l.operateUserId,l.operateType from centralcommonfault_link l where l.operateType in(54,55)) d2 on d2.mainId=m.id  WHERE  m.deleted=0  and m.sendTime >= to_date('2014-06-25 09:25:42','yyyy-MM-dd HH24:mi:ss') and m.sendTime <= to_date('2014-06-26 09:25:42','yyyy-MM-dd HH24:mi:ss') order by  m.sendTime desc ]; nested exception is java.sql.SQLException: ORA-00918: 未明确定义列

java.sql.SQLException: ORA-00918: 未明确定义列

at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:573)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1891)

java代码如下(执行别的sql都好着):
public List getListBySql(final String countsql, final String sql, final Integer curPage, final Integer pageSize, int aTotal[])
throws HibernateException
{
HibernateCallback callbackcount = new HibernateCallback() {

public Object doInHibernate(Session session)
throws HibernateException
{
Query query = session.createSQLQuery(countsql);
return (BigDecimal)query.uniqueResult();
}

};
BigDecimal total = (BigDecimal)getHibernateTemplate().execute(callbackcount);
aTotal[0] = total.intValue();
HibernateCallback callback = new HibernateCallback() {

public Object doInHibernate(Session session)
throws HibernateException
{
Query query = session.createSQLQuery(sql);
if (pageSize.intValue() != -1)
{
query.setFirstResult(pageSize.intValue() * curPage.intValue());
query.setMaxResults(pageSize.intValue());
}
return query.list();
}

};
return getHibernateTemplate().executeFind(callback);
}

------解决方案--------------------
2个表里都有相同名字的字段
------解决方案--------------------
会不会重复的是你java表定义的外键索引?
------解决方案--------------------
你用的是hibernate,写的sql里面有两个字段冲突了,如a表里面有name,b表里面有name,select a.name,b.name from a,b就会出问题,但是在sql工具里面能正常执行这个是hibernate的原因
------解决方案--------------------
未定义明确列,是不是查询的表别名 或者是字段写的有错误?
------解决方案--------------------
在数据库里查出来,看看对应的列名是否有一样的就知道了。
------解决方案--------------------
嗯,是这样的。
  相关解决方案