当前位置: 代码迷 >> Java Web开发 >> hibernate+s2+Spring 框架多对一作练习时网页报错: ORA-00904: "EMP0_""DEPTNO" 标识符无效
  详细解决方案

hibernate+s2+Spring 框架多对一作练习时网页报错: ORA-00904: "EMP0_""DEPTNO" 标识符无效

热度:1015   发布时间:2016-04-14 18:57:28.0
hibernate+s2+Spring 框架多对一做练习时网页报错: ORA-00904: "EMP0_"."DEPTNO": 标识符无效
有两张表:
Emp:员工表的实体类

        private int id;
private String name;
private String job;
private double sal;
private Date time;
private Dept dept;


映射文件; Emp.hbm.xml

<hibernate-mapping>
<class name="ling.entity.Emp" table="EMP">
<id name="id" column="EMPNO">
<!-- 主键的生成器 assigned:代表要自己选择生成的值-->
<generator class="assigned"></generator>
</id>
<property name="name" column="ENAME" type="string" not-null="true"></property>
<property name="job" column="JOB" type="string" not-null="true"></property>
<property name="sal" column="SAL" type="string" not-null="true"></property>
<property name="time" column="HIREDATE" type="string" not-null="true"></property>

<many-to-one name="dept"  class="ling.entity.Dept" cascade="save-update">
<column name="deptNo"></column>
</many-to-one>

</class>
</hibernate-mapping>





Dept:部门表的实体类

private int deptNo;
private String deptName;



映射文件:

    <hibernate-mapping>
<class name="ling.entity.Dept" table="DEPT">
<id name="deptNo" column="DEPTNO">
<!-- 主键的生成器 assigned:代表要自己选择生成的值-->
<generator class="assigned"></generator>
</id>
<property name="deptName" column="DEPTNAME" type="string" not-null="true"></property>

</class>
</hibernate-mapping>


Dao层查询所有的方法:

public List<Emp> emps() {
// TODO Auto-generated method stub
return super.getHibernateTemplate().find("from Emp") ;
}
:

网页中报错:
HTTP Status 500 - could not execute query; SQL [select emp0_.EMPNO as EMPNO0_, emp0_.ENAME as ENAME0_, emp0_.JOB as JOB0_, emp0_.SAL as SAL0_, emp0_.HIREDATE as HIREDATE0_, emp0_.deptNo as deptNo0_ from EMP emp0_]; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query


java.sql.SQLException: ORA-00904: "EMP0_"."DEPTNO": 标识符无效

控制台输出查询语句:Hibernate: select emp0_.EMPNO as EMPNO0_, emp0_.ENAME as ENAME0_, emp0_.JOB as JOB0_, emp0_.SAL as SAL0_, emp0_.HIREDATE as HIREDATE0_, emp0_.deptNo as deptNo0_ from EMP emp0_


以上语句放在orcle数据库中同样报标识列无效

请帮忙看一下是哪里的问题 , 非常着急, 谢谢.

------解决思路----------------------
大哥  你人员信息表里都没有部门信息字段  你是通过部门表里的ID来关联的  但是你在人员信息表里没有部门ID 只有个部门实体 怎么能关联上? 应该这样:

        private int id;
private String name;
private String job;
private double sal;
private Date time;
        private int  deptId;
private Dept dept;




xml:

<hibernate-mapping>
<class name="ling.entity.Emp" table="EMP">
<id name="id" column="EMPNO">
<!-- 主键的生成器 assigned:代表要自己选择生成的值-->
<generator class="assigned"></generator>
</id>
<property name="name" column="ENAME" type="string" not-null="true"></property>
<property name="job" column="JOB" type="string" not-null="true"></property>
<property name="sal" column="SAL" type="string" not-null="true"></property>
<property name="time" column="HIREDATE" type="string" not-null="true"></property>
<property name="deptId" column="DEPTID" type="string"  insert="false" update="false"></property>
<many-to-one name="dept"  class="ling.entity.Dept" cascade="save-update">
<column name="DEPTID"></column>
</many-to-one>

</class>
</hibernate-mapping>






------解决思路----------------------

?<many-to-one?name="dept"??class="ling.entity.Dept"?cascade="save-update" column="deptNo">?</many-to-one>
</many-to-one>


再有错call我。。。我一直在啊////
  相关解决方案