ORA-02275: 此表中已經存在這樣的引用約束條件


問題描述:

    針對這個問題,發表一下我的觀點。emp表和dept表使用hibernate關聯查詢時報的錯,使用的是非注解形式,和其他一樣。他們各自有entity,各自有一個hbm.xml文件,emp表這邊配置多對一,dept表這邊在set或者list中配置一對多。

consol報錯截圖如下:

代碼片段:

   部門entity

public class Dept {
    private Set<Emp> emps = new HashSet<Emp>(); 
set/get方法...
}

  部門hbm.xml

<hibernate-mapping package="com.cissst.it.dept.entity">
    <class name="Dept" table="DEPT">
        <id name="deptno" column="DEPTNO">
            <generator class="native"></generator>
        </id>
        <property name="dname" column="DNAME"></property>
        <set name="emps" inverse="true">
            <key column="deptno"></key>
            <one-to-many class="com.cissst.it.emp.entity.Emp"/>
        </set>
    </class>
</hibernate-mapping>

 

  員工entity

public class Emp {
    //所屬部門
    private Dept dept;
set/get方法...
}

  員工.hbm.xml

<hibernate-mapping package="com.cissst.it.emp.entity">
    <class name="Emp" table="EMP">
        <id name="empno" column="EMPNO">
            <generator class="native"></generator>
        </id>
        <property name="ename" column="ENAME"></property>
        <property name="job" column="JOB"></property>
        <many-to-one name="dept" class="com.cissst.it.dept.entity.Dept"/>
    </class>
</hibernate-mapping>

執行報錯的方法:

Session session = SessionUtil.openSession();
Dept dept = session.get(Dept.class, 10);
System.out.println(dept);

問題分析:

    根據錯誤提示,估計是兩個實體類關系重復定義了,於是我復制了emp表和dept,復制后得到emp1和dept1,然后對emp1和dept1設置了主鍵,沒有設置外鍵,結果運行正常。這說明數據庫中的外鍵定義了一次2個表關系   和  hbm定義了一次表關系重復定義了。

解決思路:

我在之前做過的審計項目中,數據庫中有些表也是僅僅設置了主鍵,他們之間的關系也只是在注解中體現了。如有問題,煩請斧正;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM