第一条SQL竟然可以,第二条反而不行,奇怪了,第一个SQL OsDirect 是对应实体,OBJECTID ,INSTANCEID 是表的字段,为什么可以啊,不是必须是属性才行的吗,第二条SQL按理说是正常的,但打印出来的SQL,表名是转化了,但是属性却没转换,这是为什么?
public void processDirect(OsDirect model) throws Exception
{
String sql=" from OsDirect where OBJECTID = '"+model.getOskind()+"' and INSTANCEID ='"+model.getInstanceid()+"'"; // String sql=" from OsDirect where oskind = '"+model.getOskind()+"' and instanceid ='"+model.getInstanceid()+"'";
System.out.println(sql);
this.delete(sql);
this.add(model);
} public void delete(String sql) throws Exception { HibernateSessionManager.currentSession().delete(sql);
HibernateSessionManager.currentSession().flush(); } Hibernate: select osdirect0_.ID as ID, osdirect0_.OBJECTID as OBJECTID, osdirect0_.CURRENTUSER as CURRENTU3_, osdirect0_.SENDTO as SENDTO, osdirect0_.WFID as WFID, osdirect0_.INSTANCEID as INSTANCEID, osdirect0_.TASKID as TASKID, osdirect0_.URL as URL, osdirect0_.TITLE as TITLE from OS_DIRECT osdirect0_ where (oskind='R1323' )and(instanceid='4924' )
WARN - JDBCExceptionReporter.logExceptions(57) | SQL Error: 904, SQLState: 42000
ERROR - JDBCExceptionReporter.logExceptions(58) | ORA-00904: "OSKIND": 标识符无效WARN - JDBCExceptionReporter.logExceptions(57) | SQL Error: 904, SQLState: 42000
ERROR - JDBCExceptionReporter.logExceptions(58) | ORA-00904: "OSKIND": 标识符无效net.sf.hibernate.exception.SQLGrammarException: Could not execute query
at net.sf.hibernate.exception.ErrorCodeConverter.convert(ErrorCodeConverter.java:69)
at net.sf.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:29)
at net.sf.hibernate.impl.SessionImpl.convert(SessionImpl.java:4131)
at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1557)
at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1531)
at net.sf.hibernate.impl.SessionImpl.delete(SessionImpl.java:1678)
at net.sf.hibernate.impl.SessionImpl.delete(SessionImpl.java:1664)配置文件是没问题的,保存是OK的
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
<hibernate-mapping>
<class name="com.xx.entity.po.OsDirect" table="OS_DIRECT">
<id name="id" column="ID" type="java.lang.Integer">
<generator class="sequence">
<param name="sequence">SEQ_OS_DIRECT</param>
</generator>
</id>
<property name="oskind" type="java.lang.String"
update="true" insert="true" column="OBJECTID" />
<property name="currentUser" type="java.lang.String"
update="true" insert="true" column="CURRENTUSER" />
<property name="nextUser" type="java.lang.String"
update="true" insert="true" column="SENDTO" />
<property name="wfid" type="java.lang.String"
update="true" insert="true" column="WFID" />
<property name="instanceid" type="java.lang.String"
update="true" insert="true" column="INSTANCEID" />
<property name="taskid" type="java.lang.String"
update="true" insert="true" column="TASKID" />
<property name="url" type="java.lang.String"
update="true" insert="true" column="URL" />
<property name="title" type="java.lang.String"
update="true" insert="true" column="TITLE" />
</class></hibernate-mapping>
public void processDirect(OsDirect model) throws Exception
{
String sql=" from OsDirect where OBJECTID = '"+model.getOskind()+"' and INSTANCEID ='"+model.getInstanceid()+"'"; // String sql=" from OsDirect where oskind = '"+model.getOskind()+"' and instanceid ='"+model.getInstanceid()+"'";
System.out.println(sql);
this.delete(sql);
this.add(model);
} public void delete(String sql) throws Exception { HibernateSessionManager.currentSession().delete(sql);
HibernateSessionManager.currentSession().flush(); } Hibernate: select osdirect0_.ID as ID, osdirect0_.OBJECTID as OBJECTID, osdirect0_.CURRENTUSER as CURRENTU3_, osdirect0_.SENDTO as SENDTO, osdirect0_.WFID as WFID, osdirect0_.INSTANCEID as INSTANCEID, osdirect0_.TASKID as TASKID, osdirect0_.URL as URL, osdirect0_.TITLE as TITLE from OS_DIRECT osdirect0_ where (oskind='R1323' )and(instanceid='4924' )
WARN - JDBCExceptionReporter.logExceptions(57) | SQL Error: 904, SQLState: 42000
ERROR - JDBCExceptionReporter.logExceptions(58) | ORA-00904: "OSKIND": 标识符无效WARN - JDBCExceptionReporter.logExceptions(57) | SQL Error: 904, SQLState: 42000
ERROR - JDBCExceptionReporter.logExceptions(58) | ORA-00904: "OSKIND": 标识符无效net.sf.hibernate.exception.SQLGrammarException: Could not execute query
at net.sf.hibernate.exception.ErrorCodeConverter.convert(ErrorCodeConverter.java:69)
at net.sf.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:29)
at net.sf.hibernate.impl.SessionImpl.convert(SessionImpl.java:4131)
at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1557)
at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1531)
at net.sf.hibernate.impl.SessionImpl.delete(SessionImpl.java:1678)
at net.sf.hibernate.impl.SessionImpl.delete(SessionImpl.java:1664)配置文件是没问题的,保存是OK的
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
<hibernate-mapping>
<class name="com.xx.entity.po.OsDirect" table="OS_DIRECT">
<id name="id" column="ID" type="java.lang.Integer">
<generator class="sequence">
<param name="sequence">SEQ_OS_DIRECT</param>
</generator>
</id>
<property name="oskind" type="java.lang.String"
update="true" insert="true" column="OBJECTID" />
<property name="currentUser" type="java.lang.String"
update="true" insert="true" column="CURRENTUSER" />
<property name="nextUser" type="java.lang.String"
update="true" insert="true" column="SENDTO" />
<property name="wfid" type="java.lang.String"
update="true" insert="true" column="WFID" />
<property name="instanceid" type="java.lang.String"
update="true" insert="true" column="INSTANCEID" />
<property name="taskid" type="java.lang.String"
update="true" insert="true" column="TASKID" />
<property name="url" type="java.lang.String"
update="true" insert="true" column="URL" />
<property name="title" type="java.lang.String"
update="true" insert="true" column="TITLE" />
</class></hibernate-mapping>
是正确的select osdirect0_.ID as ID, osdirect0_.OBJECTID as OBJECTID where oskind = 'XXX';
是错误地!~判断错误,首先要把你运行的sql语句拿来看一下,或者直接拿来运行一下就知道什么地方错误了
String sql=" from OsDirect where oskind = '"+model.getOskind()+"' and instanceid ='"+model.getInstanceid()+"'"这条SQL就是生成下面,为什么OsDirect 可以转换成OS_DIRECT ,而 oskind 却转换不了OBJECTID
select osdirect0_.ID as ID, osdirect0_.OBJECTID as OBJECTID, osdirect0_.CURRENTUSER as CURRENTU3_, osdirect0_.SENDTO as SENDTO, osdirect0_.WFID as WFID, osdirect0_.INSTANCEID as INSTANCEID, osdirect0_.TASKID as TASKID, osdirect0_.URL as URL, osdirect0_.TITLE as TITLE from OS_DIRECT osdirect0_ where (oskind='R1323' )and(instanceid='4924' )
表 -> 类
记录 -> 对象
表 别名(OsDirect o) -> 定义对象虽然可能不准确,但是这样别名就特别有意义,不会忘记了