Hibernate没有使用SELECT和ORA-00984检索正确的值:此处不允许列错误

时间:2017-10-03 17:03:27

标签: spring hibernate hql spring-4 hibernate-4.x

我在这里遇到两个问题:

问题1)我正在尝试使用b=np.swapaxes(a,3,2).reshape(4,28*8,28*8) 变量获取COMPANY_ID,如下所示。我将返回的值存储到selectCompanyID变量中。当我尝试打印它时,如下面的控制台输出中所示,它始终打印数字getCompanyID。但是,当我试图运行实际的SQL时 Oracle SQL开发人员SQL Worksheeet,我得到了不同的数字。因此,我可以在下面的INSERT语句中插入错误的ID 习惯了。

问题2)如SQL中所示,我也遇到1错误。注意到,人们在以下帖子中遇到类似的错误: "column not allowed here" error in INSERT statement

但是在这里我没有像上面提到的缺少引号的帖子那样简单的SQL INSERT语句。

ORA-00984: column not allowed here

控制台:

public boolean insertEmployeeDetails(Employee employee)
    {
        logger.debug("Starting EmployeeDaoImpl.insert()  .....");
        Session session = null;
        Transaction tx = null;
        boolean status = true;
        try {
            session = sessionFactory.openSession();
            tx = session.beginTransaction();


            //The following SELECT query returns a number when I ran it in the Oracle SQL developer SQL worksheet 

            String selectCompanyID = "SELECT"
                                        + " VALUE_EMP_ID"
                                +" FROM "
                                        + " COMPANY_DATA"
                                +" WHERE"
                                          + " testing_id = 1234"
                                +" AND "
                                          + " company_employee_id = 3345";

            int getCompanyID = session.createSQLQuery(selectCompanyID)
                           .executeUpdate();

            System.out.println("GetCompanyID Test below");
            System.out.println(getCompanyID);              



            String hqlInsert = "INSERT INTO Employee (NAME, IS_CORRECT,IS_WRONG,COMPANY_ID, TRANSACTION_ID,DEFINITION) VALUES"
                    + "( SELECT value_emp_id FROM COMPANY_DATA WHERE testing_id = 1234 AND"
                    + " company_employee_id = 3345))";


            String hqlInsert = "INSERT INTO Employee (NAME,IS_CORRECT,IS_WRONG,COMPANY_ID,TRANSACTION_ID,DEFINITION) VALUES "
                    + "("
                    +employee.getName()+","
                    +employee.getIsCorrect()+","
                    +employee.getIsWrong()+","
                    +getCompanyID+","
                    +employee.getTransactionId()+","
                    +employee.getDefinition()+")";      

            System.out.println("October 3 Checking for hqlInsert");
            System.out.println(hqlInsert);          

            int createdEntities = session.createSQLQuery( hqlInsert )
                    .executeUpdate();

            session.persist(employee);
            tx.commit();
            System.out.println("October 3 BELOW Checking for hqlInsert");
            System.out.println(hqlInsert); 

            System.out.println("Checking for CreatedEntities");
            System.out.println(createdEntities);
        } catch(Exception ex) {
            tx.rollback();
            ex.printStackTrace();
            status = false;
        } finally {
            session.close();
        }
        logger.debug("Completed EmployeeDaoImpl.insert()  .....");
        return status;
    }

这是我的实体类Hibernate: SELECT VALUE_EMP_ID FROM COMPANY_DATA WHERE testing_id = 1234 AND company_employee_id = 3345 GetCompanyID Test below 1 October 3 Checking for hqlInsert INSERT INTO Employee (NAME,IS_CORRECT,IS_WRONG,COMPANY_ID,TRANSACTION_ID,DEFINITION) VALUES (Terminology,0,0,1,0,definitionTest) Hibernate: INSERT INTO Employee (NAME,IS_CORRECT,IS_WRONG,COMPANY_ID,TRANSACTION_ID,DEFINITION) VALUES (Terminology,0,0,1,0,definitionTest) 2017-10-03 11:32:43.753 WARN 5392 --- [nio-8080-exec-4] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 984, SQLState: 42000 2017-10-03 11:32:43.753 ERROR 5392 --- [nio-8080-exec-4] o.h.engine.jdbc.spi.SqlExceptionHelper : ORA-00984: column not allowed here 如下:

Employee.java

1 个答案:

答案 0 :(得分:0)

尝试将插入语句中的Stringemployee.getName()employee.getDefinition()放入引号'

String hqlInsert = "INSERT INTO Employee (NAME,IS_CORRECT,IS_WRONG,COMPANY_ID,TRANSACTION_ID,DEFINITION) VALUES "
                    + "('"
                    +employee.getName()+"',"
                    +employee.getIsCorrect()+","
                    +employee.getIsWrong()+","
                    +getCompanyID+","
                    +employee.getTransactionId()+",'"
                    +employee.getDefinition()+"')";