当前位置: 代码迷 >> Java Web开发 >> @ManyToOne@OneToMany双向关联之java.sql.SQLSyntaxErrorException:ORA-009 ...
  详细解决方案

@ManyToOne@OneToMany双向关联之java.sql.SQLSyntaxErrorException:ORA-009 ...

热度:969   发布时间:2011-04-29 15:11:15.0
@ManyToOne@OneToMany双向关联之java.sql.SQLSyntaxErrorException:ORA-00904:标识符无效
   前几天用hibernate映射数据库产生了实体类,其中两个表叫左dept和emp,以下是它的实体类,我从数据库表联系发现他们之间是@OnetoMany @ManyToOne的双向关联,所以我就使用了关联,我的框架是SSH框架我使用的是hibernateTemplate让它自动生成代码,我在测试列出方法的时候报错:java.sql.SQLSyntaxErrorException: ORA-00904: "THIS_"."DEPT_DNO": 标识符无效
hibernateTemplate自动生成的Oracle sql语句如下:Hibernate:
    select
        this_.empno as empno1_1_,
        this_.dept_dno as dept8_1_1_,
    from
        Emp this_,
        Dept dept2_
    where
        this_.dept_dno=dept2_.dno(+)
14:53:53,534  WARN org.hibernate.util.JDBCExceptionReporter:100 - SQL Error: 904, SQLState: 42000
14:53:53,535 ERROR org.hibernate.util.JDBCExceptionReporter:101 - ORA-00904: "THIS_"."DEPT_DNO": 标识符无效



以下是数据库表

Emp

序号    列名    数据类型    长度    小数位    标识    主键    允许空    默认值    说明
1    EMPNO    VARCHAR2    40            是    否        PK
2    DNO    VARCHAR2    40                是        FK dept(dno)


Dept

序号    列名    数据类型    长度    小数位    标识    主键    允许空    默认值    说明
1    DNO    VARCHAR2    20            是    否        PK

Dept.java
@Entity
public class Dept {

    // Fields

    private String dno;
    private Set<Emp> emps = new HashSet<Emp>();

        @OneToMany(mappedBy="dept",cascade={CascadeType.ALL})
    public Set<Emp> getEmps() {
        return emps;
    }

    public void setEmps(Set<Emp> emps) {
        this.emps = emps;
    }

    @Id
    public String getDno() {
        return this.dno;
    }
    public void setDno(String dno) {
        this.dno = dno;
    }
Emp.java
Entity
public class Emp implements java.io.Serializable {

    // Fields

    private String empno;
    private Dept dept;

@Id
    public String getEmpno() {
        return this.empno;
    }

    public void setEmpno(String empno) {
        this.empno = empno;
    }
    @ManyToOne
    public Dept getDept() {
        return this.dept;
    }

    public void setDept(Dept dept) {
        this.dept = dept;
    }


[ 本帖最后由 lovemm 于 2011-4-29 15:16 编辑 ]
搜索更多相关主题的帖子: sql语句  数据库  

----------------解决方案--------------------------------------------------------
怎么没人回复我啊,不是我的提问太难了吧
----------------解决方案--------------------------------------------------------
你把那表Emp列名DNO改成dept_dno就可以了!!!
----------------解决方案--------------------------------------------------------
但我的Oracle数据库表根本就没这字段啊,我数据库字段只有数据dept的dno主键,数据emp的dno外键,根本就没有这个dept_dno啊,再说我是跟着数据库做事的不可以随便改动数据库表的
----------------解决方案--------------------------------------------------------
  相关解决方案