java.sql.SQLException:ORA-01747:user.table.column,table.column或列规范无效

时间:2013-05-03 14:32:27

标签: java hibernate oracle11g

我收到错误

java.sql.SQLException: ORA-01747: invalid user.table.column, table.column, or column specification

我返回此错误的代码是:

public boolean checkAttendance(String userid,String currentdate){
        boolean status=false;
        List attendanceList=new ArrayList();
        Session session = getSessionFactory().openSession();
        try {
            Transaction tx = session.beginTransaction();
            String hql = "select userid from Attendance where userid='"+ userid +"' and date='"+currentdate+"'";
            Query query = session.createQuery(hql); 
            attendanceList = (ArrayList) query.list();  //This Line returning the error
            if(attendanceList.size()>0)
            {
                status=true;
            }
            tx.commit();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.close();
        }       

        return status;
    }

我试图在我的Context.xml文件中启用view sql

<property name="hibernateProperties">
            <value>
                hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
                hibernate.show_sql=true;
            </value>
        </property>

我看不到sql被执行了,我不知道为什么会出现这个错误,因为我的表和字段是正确的。请帮忙。我使用的是Oracle 11g

1 个答案:

答案 0 :(得分:2)

select userid from Attendance where userid...是SQL,不是有效的HQL。

您应该将其更改为

select a.userid from Attendance a where a.userid = :userid and a.date=:currentdate

OT - 始终使用查询参数而不是字符串连接是个好主意。使用参数更安全,更有效。有关详细说明,请参阅this article

编辑:提前检查查询字符串的有效性。如果它无效,则不会进行SQL创建。如果没有创建SQL,则无需执行任何操作。因此,show_sql标志对无效查询无效。