Menu

#167 IllegalArgumentException - Column not found

open
hibernate (22)
5
2005-02-01
2005-02-01
Anonymous
No

I am trying to generate Hibernate mapping files from
Oracle database. We have many unique indexes with sql
functions. For
CREATE UNIQUE INDEX UK_EQUIPMENT
ON PTH_EQUIPMENT (LOWER("NAME")).

Oracle assigns a unique column names (something like
SYS_NC0014$) for those index. Middlegen is not
handling these kind of columns and throws the error.

[middlegen] java.lang.IllegalArgumentException: There is
no column named SYS_NC0
0011$ in the table named PTH_EQUIPMENT
[middlegen] at middlegen.DbTable.getColumn
(DbTable.java:309)
[middlegen] at
middlegen.MiddlegenPopulator.addColumns
(MiddlegenPopulator.ja
va:1012)
[middlegen] at middlegen.MiddlegenPopulator.populate
(MiddlegenPopulator.java
:217)
[middlegen] at middlegen.MiddlegenTask.execute
(MiddlegenTask.java:432)
[middlegen] at
org.apache.tools.ant.UnknownElement.execute
(UnknownElement.ja
va:275)
[middlegen] at org.apache.tools.ant.Task.perform
(Task.java:364)
[middlegen] at org.apache.tools.ant.Target.execute
(Target.java:341)
[middlegen] at
org.apache.tools.ant.Target.performTasks
(Target.java:369)
[middlegen] at
org.apache.tools.ant.Project.executeTarget
(Project.java:1214)

[middlegen] at
org.apache.tools.ant.Project.executeTargets
(Project.java:1062
)
[middlegen] at org.apache.tools.ant.Main.runBuild
(Main.java:673)
[middlegen] at org.apache.tools.ant.Main.startAnt
(Main.java:188)
[middlegen] at
org.apache.tools.ant.launch.Launcher.run
(Launcher.java:196)
[middlegen] at
org.apache.tools.ant.launch.Launcher.main
(Launcher.java:55)

BUILD FAILED
C:\Projects\tools\Middlegen-Hibernate-r5\atb-
build.xml:148: java.lang.IllegalArg
umentException: There is no column named
SYS_NC00011$ in the table named PTH_EQU
IPMENT

Is there any solution?

Discussion

  • Ben Litchfield

    Ben Litchfield - 2005-02-01

    Logged In: YES
    user_id=601708

    What version of middlegen are you using?
    What db version are you using?

    Can you try with middlegen built from CVS.

    Can you attach a SQL script to create the table and unique
    constraint so we can reproduce the issue.

    Ben

     
  • Kumaran

    Kumaran - 2005-02-04

    Logged In: YES
    user_id=1209902

    I am using Middlegen 2.1 (ie, latest stable version) and Oracle
    9i.

    The following is the script used to create the
    table/constraints.

    CREATE TABLE PTH_EQUIPMENT
    (
    EQUIPMENT_ID NUMBER(10) NOT NULL,
    NAME VARCHAR2(200) NOT NULL,
    NO_OF_BLOCKS_PROCESSED NUMBER(10) NOT
    NULL,
    PROCESSING_CAPACITY NUMBER(10) NOT NULL,
    LAST_RESET_DATE DATE,
    DESCRIPTION VARCHAR2(2000),
    INSERT_USER NUMBER(10) NOT NULL,
    INSERT_DATE DATE NOT NULL,
    UPDATE_USER NUMBER(10),
    UPDATE_DATE DATE
    )
    TABLESPACE ATB_DATA
    PCTUSED 40
    PCTFREE 10
    INITRANS 1
    MAXTRANS 255
    STORAGE (
    INITIAL 40K
    NEXT 40K
    MINEXTENTS 1
    MAXEXTENTS 505
    PCTINCREASE 50
    FREELISTS 1
    FREELIST GROUPS 1
    BUFFER_POOL DEFAULT
    )
    LOGGING
    NOCACHE
    NOPARALLEL;

    CREATE UNIQUE INDEX PK_EQUIPMENT_EQUIPMENT_ID ON
    PTH_EQUIPMENT
    (EQUIPMENT_ID)
    LOGGING
    TABLESPACE ATB_INDEX
    PCTFREE 10
    INITRANS 2
    MAXTRANS 255
    STORAGE (
    INITIAL 40K
    NEXT 40K
    MINEXTENTS 1
    MAXEXTENTS 505
    PCTINCREASE 50
    FREELISTS 1
    FREELIST GROUPS 1
    BUFFER_POOL DEFAULT
    )
    NOPARALLEL;

    CREATE UNIQUE INDEX UK_EQUIPMENT ON PTH_EQUIPMENT
    (LOWER("NAME"))
    LOGGING
    TABLESPACE ATB_INDEX
    PCTFREE 10
    INITRANS 2
    MAXTRANS 255
    STORAGE (
    INITIAL 40K
    NEXT 40K
    MINEXTENTS 1
    MAXEXTENTS 505
    PCTINCREASE 50
    FREELISTS 1
    FREELIST GROUPS 1
    BUFFER_POOL DEFAULT
    )
    NOPARALLEL;

    ALTER TABLE PTH_EQUIPMENT ADD (
    CONSTRAINT PK_EQUIPMENT_EQUIPMENT_ID PRIMARY KEY
    (EQUIPMENT_ID)
    USING INDEX
    TABLESPACE ATB_INDEX
    PCTFREE 10
    INITRANS 2
    MAXTRANS 255
    STORAGE (
    INITIAL 40K
    NEXT 40K
    MINEXTENTS 1
    MAXEXTENTS 505
    PCTINCREASE 50
    FREELISTS 1
    FREELIST GROUPS 1
    ));
    It gives the problem for the unique constraints
    UK_EQUIPMENT.

    I will try to use middlegen after getting from CVS. Let me
    know if you are able to guess the problem from this input.

    Thanks.

     
  • Ben Litchfield

    Ben Litchfield - 2005-02-05

    Logged In: YES
    user_id=601708

    I ran the script on an Oracle8i database and middlegen
    worked with that.

    Can you please try with a version of middlegen built from CVS
    and let me know if it works.

    I will install Oracle9i if you are still having a problem.

    Ben

     
  • Christian Kleinewaechter

    Logged In: YES
    user_id=468236

    The problem is not the unique constraint but the fact that
    we have a function based index. I could reproduce this on 9i
    both with unique and non-unique FBIs.
    Connection.getMetaData().getIndexInfo() lists a pseudocolumn
    for these indexes that is named like "SYS_NC.....$". There
    seems to be no direct way to recognize these pseudocolumns
    (e.g. TYPE is the same for FBIs and non-FBIs). At least they
    obey the Oracle convention for internal names that normally
    should not be accessed anyway, so maybe we could skip
    columns ending with a "$". I've made up a patch for this,
    but it's still untested.

     
  • Christian Kleinewaechter

    Logged In: YES
    user_id=468236

    Patch # is 1219950

     

Log in to post a comment.