第一条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>

解决方案 »

  1.   

    数据库表字段名为 OBJECTID 而不是 oskind
      

  2.   

    select osdirect0_.ID as ID, osdirect0_.OBJECTID as OBJECTID where OBJECTID  = 'XXX';
    是正确的select osdirect0_.ID as ID, osdirect0_.OBJECTID as OBJECTID where oskind = 'XXX';
    是错误地!~判断错误,首先要把你运行的sql语句拿来看一下,或者直接拿来运行一下就知道什么地方错误了
      

  3.   

    这位大哥,
    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' )
      

  4.   

    from OsDirect o where o.oskind = ... and o.instanceid = ...
      

  5.   

    我的orm概念是:
    表 -> 类
    记录 -> 对象
    表 别名(OsDirect o) -> 定义对象虽然可能不准确,但是这样别名就特别有意义,不会忘记了