Jdbc ora-22979:无法插入对象视图引用或用户定义的引用

Jdbc ora-22979:无法插入对象视图引用或用户定义的引用,jdbc,oracle12c,ref,user-defined-types,ordbms,Jdbc,Oracle12c,Ref,User Defined Types,Ordbms,我尝试通过Java JDBC将Ref插入/更新到oracle12c数据库中 该类型定义为: CREATE OR REPLACE TYPE AngestellterTyp UNDER PersonTyp ( PersonalNr INTEGER, Rang VARCHAR(200), Einstellung DATE, TelefonBuero TelefonnummerVarrayTyp, Bemerkungen VARCHAR(2

我尝试通过Java JDBC将Ref插入/更新到oracle12c数据库中

该类型定义为:

CREATE OR REPLACE TYPE AngestellterTyp UNDER PersonTyp (
 PersonalNr      INTEGER,
 Rang            VARCHAR(200),
 Einstellung     DATE,
 TelefonBuero    TelefonnummerVarrayTyp,
 Bemerkungen     VARCHAR(2000),
 Vorgesetzter    REF AngestellterTyp
) NOT FINAL;
使用此update语句

public void setVorgesetzter(Long angestelterid,Long vergesetzterId)抛出SQLException{
Ref vorgesetzter=this.getangestletref(vergesetzterId);
Connection Connection=this.dataSource.getConnection();
PreparedStatement语句=connection.prepareStatement(“更新Angestelte并设置an.Vorgesetzter=?其中an.PersonalNr=?”;
声明.setRef(1,vorgesetzter);
语句.setInt(2,angestletrid.intValue());
语句。executeUpdate();
}
public Ref getangestletref(Long personalnumer){
试一试{
返回getOracleRef(“从Angestelte a中选择参考(a),其中a.PersonalNr=“+personalNummer”);
}捕获(SQLE异常){
e、 printStackTrace();
}
返回null;
}
私有引用getOracleRef(字符串查询)引发SQLException{
Ref reference=null;
Connection Connection=this.dataSource.getConnection();
语句Statement=connection.createStatement();
ResultSet ResultSet=statement.executeQuery(查询);
if(resultSet.next()){
reference=resultSet.getRef(1);
}
resultSet.close();
语句。close();
返回参考;
}
原因:

ava.sql.SQLException: ORA-22979: Objekt-View-REF oder benutzerdefinierte REF kann nicht mit INSERT eingefügt werden


at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:447)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:951)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:513)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:227)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:208)
at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1046)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1336)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3613)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3714)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:1378)
我从SQLData使用readSQL和writeSQL。在writeSQL中插入Ref会导致相同的异常

甲骨文建议:

大宗报价 确保要插入的引用不是来自对象视图或用户定义的引用列 大宗报价


但是怎么做呢?

解决方案是将表定义从:

CREATE TABLE Angestellte OF AngestellterTyp (
CONSTRAINT angestellter_pk PRIMARY KEY (PersonalNr)
) OBJECT IDENTIFIER IS PRIMARY KEY;
致:

CREATE TABLE Angestellte OF AngestellterTyp (
CONSTRAINT angestellter_pk PRIMARY KEY (PersonalNr)
);