Missing primary foreign key in grandchild table
I have a model with a two inheritance generations.
https://www.dropbox.com/s/4rghqcmxx24bgvt/pf_logical.png
When I engineer all entities everything is fine. The child tables get their primary foreign keys:
https://www.dropbox.com/s/t4v5bexxwdrn5y1/pf_engineered.png
But when I do not engineer the child generation the grandchildren have no primary foreign keys anymore.
https://www.dropbox.com/s/ofl436sm8dua3w8/pf_missing.png
I have expected, that the grandchildren get a primary foreign key to the grandfather. But that is not the case. How can I tell the modeler to engineer such a foreign key?
Hi,
thanks for reporting the problem. I logged a bug for that.
Philip
Similar Messages
-
Query Builder recognizing primary/foreign key
Is there a way to have Query Builder recogninze the primary/foreign keys of the tables when they are selected? Right now it looks like you have to manually join the tables together by selected the column(s) to join.
ThanksYou can define a query key[1] 'planId' on InvestmentOption for the PLAN_OID column. That'll let you write an expression like the one below which does not produce a join. The nice part about the query key is that it does not require you to add attributes to your object in order to query o them.
Expression plan = new ExpressionBuilder();
Expression where = plan.get("planId").equal(somePlanId);--Shaun
[1] http://www.oracle.com/technology/products/ias/toplink/doc/10131/main/_html/descfg010.htm#sthref3039 -
Update primary key thats also a foreign key in another table
Hi Developers,
I need to update the primary key for a record but it's also the foreign key in another table.
Example,
Table 1 Details
Name : Parent_Table
Columns : ID, Name, Age
Primary Key : ID
Table 2 Details
Name : Child_Table
Columns : ID, Parent_ID, Name, Age
Primary Key : ID
Foreign Key : Parent_ID (Primary Key in Parent_Table)
Parent_Table
ID Name Age
1001 Sam 26
1002 George 25
Child_Table
ID Parent_ID Name Age
1010 1001 Sam 26
1020 1002 George 25
Now I want to update ID (1001) in Parent_table as 2001 and also, I want to update Parent_ID (1001) in Child_Table as 2001.
How we will write the java code to update these columns.
Thanks in advance.dcminter wrote:
If you're looking at changing the primary keys in your data then there's probably something wrong with your data structure.Depends how you feel about business primary keys versus surrogates. Personally I prefer the latter so I'm with you in theory. In practice, however, a DB that uses a business PK may well find that it's a legitimate use case to change the key value (but then that's why I like surrogates in the first place!)Primary keys should not have meaning. -
Foreign keys to same table / Who columns in User table???
Hi All,
We are designing a database for our client and we are using common columns in all tables like CreatedBy and UpdatedBy which are foreign keys to USER table. My question is can we use these two columns in USER table and have the foreign key constraints to the same tables?
USER table script will look like following..
CREATE TABLE XX_USER
User_ID VARCHAR2(10)
, CreatedBy NUMBER(10)
, UpdatedBy NUMBER(10)
, User_Name VARCHAR2(100) NOT NULL
, Designation VARCHAR2(100) NOT NULL
, CONSTRAINT USER_ISACTIVE_CHECK CHECK (Is_Active in ('Y', 'N'))
, CONSTRAINT USER_KEY PRIMARY KEY (User_ID),
, CONSTRAINT USER_CREATED_BY FOREIGN KEY (CREATED_BY)
REFERENCES XX_USER (USER_ID)
, CONSTRAINT USER_UPDATED_BY FOREIGN KEY (UPDATED_BY)
REFERENCES XX_USER (USER_ID)
);I think what I am doing (the above script) is not correct. Could someone please suggest me how can solve this issue?
Thanks in advance,
Oraebsuser8644385 wrote:
We are designing a database for our client and we are using common columns in all tables like CreatedBy and UpdatedBy which are foreign keys to USER table. My question is can we use these two columns in USER table and have the foreign key constraints to the same tables?You can. After fixing synatx errors:
SQL> CREATE TABLE XX_USER
2 (
3 User_ID VARCHAR2(10)
4 , CreatedBy NUMBER(10)
5 , UpdatedBy NUMBER(10)
6 , User_Name VARCHAR2(100) NOT NULL
7 , Designation VARCHAR2(100) NOT NULL
8 , Is_Active VARCHAR2(1)
9 , CONSTRAINT USER_ISACTIVE_CHECK CHECK (Is_Active in ('Y', 'N'))
10 , CONSTRAINT USER_KEY PRIMARY KEY (User_ID)
11 , CONSTRAINT USER_CREATED_BY FOREIGN KEY (CreatedBy)
12 REFERENCES XX_USER(USER_ID)
13 , CONSTRAINT USER_UPDATED_BY FOREIGN KEY (UpdatedBy)
14 REFERENCES XX_USER(USER_ID)
15 )
16 /
Table created.
SQL> Now USER_ID is a string while CreatedBy/UpdatedBy is a number. Even though it is allowed, it limits USER_ID to numeric strings and causes implicit conversions while validating. So I would change CreatedBy/UpdatedBy data type to VARCHAR2(10).
SY. -
Delete a user from a table whose name is a foreign key in other tables
Dear All;
I am trying to figure out an easy way to do this. I just recently took someone application who utilized 500 tables. I am trying to delete a user from a table called member_table. However, I am having problems doing so because the user name is a foreign key in other tables which has a relationship with this member_table. I really can't naviagte through all 500 different tables and start deleting the user from each table . hence, I would like to figure out a way to delete the user from the member_table without getting the error message
ORA - 02292 "Integrity Constraint (....) violated child record foundUnless you want to find and re-create all of the FK's that point to that field so you can make them ON DELETE CASCADE (note it is the FK not the PK that has that attribute), you will need to either delete that member id from each of the child tables individually or update each one individually to either null or some valid value in member_table before you can delete the id from member_table.
You can find all of the tables, and the corresponding column_name that have an FK relationship to memeber_table with the following:
SELECT c.table_name, col.column_name
FROM user_constraints c, user_cons_columns col
WHERE c.constraint_name = col.constraint_name and
c.r_constraint_name = (SELECT constraint_name
FROM user_constraints
WHERE table_name = 'MEMBER_TABLE' and
constraint_type = 'P') and
c.constraint_type = 'R';If there are a lot of these, you could use something similar to generate the set of delete/update statements that would be needed.
John -
FOREIGN KEY CONSTRAINT 의 MASTER TABLE NAME 의 확인
제품 : ORACLE SERVER
작성날짜 : 1995-11-02
FOREIGN KEY CONSTRAINT 의 MASTER TABLE NAME 의 확인
===================================================
다음은 FOREIGN KEY CONSTRAINT 이름으로 REFERENCE 하는 TABLE
(MASTER TABLE)을 찾는 SQL SCRIPT이다.
col Primary_key_table format a20
col Constraint_name format a20
select a.object_name Primary_Key_table,
c.name Constraint_name
from dba_objects a,
sys.cdef$ b,
sys.con$ c
where c.name = 'EMP_FOREIGN_KEY' -- CONSTRAINT NAME
and b.con# = c.con#
and b.robj# = a.object_id
/The set of constraints as you show it is valid, but will likely result in a lot of violations since both child columns are larger than the parent. The Oracle 2256 error has nothing to do with data validation, nor with the different lengths of the columns. The documentation says
02256, 00000, "number of referencing columns must match referenced columns"
// *Cause: The number of columns in the foreign-key referencing list is not
// equal to the number of columns in the referenced list.
// *Action: Make sure that the referencing columns match the referenced
// columns.Look at the actual statement that the client ran. It will be different than the one you posted. one of the two column lists will have more columns than the other. -
FOREIGN KEY CONSTRAINT의 MASTER TABLE을 REFERENCE하는 TABLE 찾기
제품 : SQL*PLUS
작성날짜 : 2003-12-17
FOREIGN KEY CONSTRAINT의 MASTER TABLE을 REFERENCE하는 TABLE 찾기
================================================================
Master table 이 dept2일 때, 이 테이블을 참조하는 table들을 찾는 SQL
select x.table_name "reference table"
from
(select distinct r_constraint_name,table_name
from all_constraints
where constraint_type='R' ) x, all_constraints a
where a.table_name = 'DEPT2'
and x.r_constraint_name = a.constraint_name; -
Foreign keys at the table partition level
Anyone know how to create and / or disable a foreign key at the table partition level? I am using Oracle 11.1.0.7.0. Any help is greatly appreciated.
Hmmm. I was under the impression that Oracle usually ignores indices on columns with mostly unique and semi-unique values and prefers to do full-table scans instead on the (questionable) theory that it takes almost as much time to find one or more semi-unique entries in an index with a billion unique values as it does to just scan through three billion fields. Though I tend to classify that design choice in the same category as Microsoft's design decision to start swapping ram out to virtual memory on a PC with a gig of ram and 400 megs of unused physical ram on the twisted theory that it's better to make the user wait while it needlessly thrashes the swapfile NOW than to risk being unable to do it later (apparently, a decision that has its roots in the 4-meg win3.1 era and somehow survived all the way to XP).
-
Basic doubt about Primary Key/Foreign Key in Oracle Tables
Hi,
I have a doubt whether Primary Keys/Foreign Keys are allowed in Oracle. Some of the people I know are telling me that Oracle does not encourage having Primary Keys/Foreign keys in its database tables.
However if I go to the ETRM and look for information about some of the Oracle Tables, I am informed that Primary Keys do exist. However I am being told that ETRM is not a reliable way of having correct information about table structure.
It would be great if any one of you provides me with some insight in this. Any pointers to a document would be great.
ThanksIt is not that PK/FKs are disallowed in Oracle Apps (there are some on the standard Oracle Apps tables), but they are typically not used. I am not positive what the logic behind this is, but my guess is that it was party due to the earlier versions of Oracle Apps pre-dating declarative database referential integrity in Oracle DB and also on performance issues with the standard referential integrity with the earlier versions of declarative database referential integrity.
As far as eTRM is concerned - I understood that the data is based on a design repository rather than a physical Oracle Apps DB. So all of the information in there is logically correct, but not necessarily enforced via the standard Oracle DB declarative referential integrity (rather by the application code or APIs). -
Basic doubt about Primary Keys/Foreign Keys in Oracle Tables
Hi,
I have a doubt whether Primary Keys/Foreign Keys are allowed in Oracle or not. I have been informed that Oracle does not encourage having Primary Keys/Foreign keys in its database tables. Instead it urges users to have unique constraints on the requisite columns.
However if I go to the ETRM and look for information about some of the Oracle Tables, I am informed that Primary Keys do exist. At the same time, I am being told that ETRM is not a reliable way of having correct information about table structure (at least the Primary Key information).
It would be nice if any one of you provides me with some insight in this. Any pointers to a document would be welcome.
ThanksFYI,
There is seprate forum for Core Sql quieries
PL/SQL
Thanks -
Detect the fields which are primary/foreign keys for each schema's tables
Hello everybody,
I'd like to know if it's possible to select a field in one of the dictionary tables to identify the fields of a table which are PK or FK in this one. I'd like to do this to generate the fields that I need to put in a technical design.
Actually I have this (if it can help you to understand what I'd like to do) :
select table_name "Table name",
column_name "Physical field name",
case when data_type = 'NUMBER' then data_type || '(' || NVL(data_precision,0) || ',' || NVL(data_scale,0) || ')'
when data_type = 'VARCHAR2' then data_type || '(' || data_length || ')'
else data_type
end "Datatype",
case when nullable = 'Y' then 'FALSE'
when nullable = 'N' then 'TRUE'
end "Not null",
/* Here I'd like to retrieve TRUE or FALSE if the field to display is a primary key or not and the same for foreign keys*/
from all_tab_columns
where table_name in (select table_name
from all_tables
where table_name like '%project_name%'
and table_name not like '%TMP%');
Thanks a lot for your help,
FlorentPlease investigate all_constraints and all_cons_colums.
http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14237/toc.htm -
Primary / foreign key replication
Good Day,
Suppose we have a Warm Standby , ASE 15.5, RS 15.6 with several databases pairs and table cross reference between these different databases, i.e:
Pdb1 -> Stdby1
Pdb2 -> Stdby2
PdbN -> StdbyN
Table T1 is at Pdb1 , table T2 is at Pdb2
T1 has a Pkey , T2 has a Fkey to PKey on T1( for example a master / detail relation ship)
and so on
Some times due to network latency (or other event) table T2 gets replicated before than T1 and replcation stops due to primary constraint violation, even though the PK exists on T1 ( but hasn't been replicated yet).
Q: Is there any way to ensure that T1 would get replicated first in order to avoid the error?
Thank you
Regards
Jose-MiguelHmmmm, doesn't work for me ... what am I missing?
===================================
select @@version
go
Adaptive Server Enterprise/15.7/EBF 22230 SMP SP121
sp_displaylogin
go
... snip ...
Configured Authorization:
sa_role (default ON)
sso_role (default ON)
replication_role (default ON)
mon_role (default ON)
Locked: NO
... snip ...
use tempdb
go
create table t1 (a int, b int)
go
alter table t1 add primary key (a)
go
create table t2 (a int references t1(a), c int)
go
insert t2 values (1,5)
go
Msg 546, Level 16, State 1:
Server 'WLP_STAGINGREP', Line 1:
Foreign key constraint violation occurred, dbname = 'tempdb', table name = 't2', constraint name = 't2_a_345657311'.
Command has been aborted.
set disable_ri_check on
go
insert t2 values(1,5)
go
Msg 546, Level 16, State 1:
Server 'WLP_STAGINGREP', Line 1:
Foreign key constraint violation occurred, dbname = 'tempdb', table name = 't2', constraint name = 't2_a_345657311'.
Command has been aborted.
insert t1 values (1,5)
insert t2 values (1,7)
go
set disable_ri_check on
go
delete t1
go
Msg 547, Level 16, State 1:
Server 'WLP_STAGINGREP', Line 1:
Dependent foreign key constraint violation in a referential integrity constraint. dbname = 'tempdb', table name = 't1', constraint name = 't2_a_345657311'.
Command has been aborted.
-- and just in case the logic is reversed
set disable_ri_check off
go
delete t1
go
Msg 547, Level 16, State 1:
Server 'WLP_STAGINGREP', Line 1:
Dependent foreign key constraint violation in a referential integrity constraint. dbname = 'tempdb', table name = 't1', constraint name = 't2_a_345657311'.
Command has been aborted.
=================================== -
How to create a foreign key for the table from two different tables?
Hi All,
I have a three table like below. In the below table SAMPLE_CONS_CHECK and SAMPLE_CONS2_CHECK will be having the primary key for NAME column. The same SAMPLE_CONS3_CHECK table also having the primary key for NAME column and forieign key for SAMPLE_CONS_CHECK and SAMPLE_CONS2_CHECK tables. See the below code 2
code 1:
CREATE TABLE SAMPLE_CONS_CHECK
(NAME VARCHAR2(10),
SERIES VARCHAR2(5)
CREATE TABLE SAMPLE_CONS2_CHECK
(NAME VARCHAR2(5),
MODEL NUMBER
CREATE TABLE SAMPLE_CONS3_CHECK
(NAME VARCHAR2(5),
MODEL_NO NUMBER
)code 2
alter table SAMPLE_CONS_CHECK
add constraint SAMPLE_CONS_CHECK_pk primary key (NAME)
alter table SAMPLE_CONS2_CHECK
add constraint SAMPLE_CONS2_CHECK_pk primary key (NAME)
alter table SAMPLE_CONS3_CHECK
add constraint SAMPLE_CONS3_CHECK_pk primary key (NAME)
ALTER TABLE SAMPLE_CONS3_CHECK ADD
CONSTRAINT SAMPLE_CONS3_CHECK_FK1 FOREIGN KEY
NAME
) REFERENCES SAMPLE_CONS_CHECK
NAME
) ON DELETE CASCADE;
ALTER TABLE SAMPLE_CONS3_CHECK ADD
CONSTRAINT SAMPLE_CONS3_CHECK_FK2 FOREIGN KEY
NAME
) REFERENCES SAMPLE_CONS2_CHECK
NAME
) ON DELETE CASCADE;From the above schenario i am able to insert the data to SAMPLE_CONS3_CHECK table. But the parent data is already available in the parent table. The problem is here two different constarints from two different tables. While inserting, it is checking from both the tables whether the parent is exist or not.
How can i solve this problem? Can anyone halp me about this?
Thanks
Edited by: orasuriya on Aug 8, 2009 2:02 AMActually the design is completely incorrect.
What you say is
I have
'foo', 'foo series'
'foo','foo model'
'foo',666
By virtue of table3 referring to both table1 and table2.
This means you actually need to have 1 (one) table:
'foo','foo series','foo model', 666
And the 'problem' disappears.
Sybrand Bakker
Senior Oracle DBA -
Caching problem w/ primary-foreign key mapping
I have seen this a couple of times now. It is not consistent enough to
create a simple reproducible test case, so I will have to describe it to you
with an example and hope you can track it down. It only occurs when caching
is enabled.
Here are the classes:
class C1 { int id; C2 c2; }
class C2 { int id; C1 c1; }
Each class uses application identity using static nested Id classes: C1.Id
and C2.Id. What is unusual is that the same value is used for both
instances:
int id = nextId();
C1 c1 = new C1(id);
C2 c2 = new C2(id);
c1.c2 = c2;
c2.c1 = c1;
This all works fine using optimistic transactions with caching disabled.
Although the integer values are the same, the oids are unique because each
class defines its own unique oid class.
Here is the schema and mapping (this works with caching disabled but fails
with caching enabled):
table t1: column id integer, column revision integer, primary key (id)
table t2: column id integer, column revision integer, primary key (id)
<jdo>
<package name="test">
<class name="C1" objectid-class="C1$Id">
<extension vendor-name="kodo" key="jdbc-class-map" value="base">
<extension vendor-name="kodo" key="table" value="t1"/>
</extension>
<extension vendor-name="kodo" key="jdbc-version-ind"
value="version-number">
<extension vendor-name="kodo" key="column" value="revision"/>
</extension>
<field name="id" primary-key="true">
<extension vendor-name="kodo" key="jdbc-field-map" value="value">
<extension vendor-name="kodo" key="column" value="id"/>
</extension>
</field>
<field name="c2">
<extension vendor-name="kodo" key="jdbc-field-map" value="one-one">
<extension vendor-name="kodo" key="column.id" value="id"/>
</extension>
</field>
</class>
<class name="C2" objectid-class="C2$Id">
<extension vendor-name="kodo" key="jdbc-class-map" value="base">
<extension vendor-name="kodo" key="table" value="t2"/>
</extension>
<extension vendor-name="kodo" key="jdbc-version-ind"
value="version-number">
<extension vendor-name="kodo" key="column" value="revision"/>
</extension>
<field name="id" primary-key="true">
<extension vendor-name="kodo" key="jdbc-field-map" value="value">
<extension vendor-name="kodo" key="column" value="id"/>
</extension>
</field>
<field name="c1">
<extension vendor-name="kodo" key="dependent" value="true"/>
<extension vendor-name="kodo" key="inverse-owner" value="c2"/>
<extension vendor-name="kodo" key="jdbc-field-map" value="one-one">
<extension vendor-name="kodo" key="table" value="t1"/>
<extension vendor-name="kodo" key="ref-column.id" value="id"/>
<extension vendor-name="kodo" key="column.id" value="id"/>
</extension>
</field>
</class>
</package>
</jdo>
Because the ids are known to be the same, the primary key values are also
used as foreign key values. Accessing C2.c1 is always non-null when caching
is disabled. With caching is enabled C2.c1 is usually non-null but sometimes
null. When it is null we get warnings about dangling references to deleted
instances with id values of 0 and other similar warnings.
The workaround is to add a redundant column with the same value. For some
reason this works around the caching problem (this is unnecessary with
caching disabled):
table t1: column id integer, column id2 integer, column revision integer,
primary key (id), unique index (id2)
table t2: column id integer, column revision integer, primary key (id)
<jdo>
<package name="test">
<class name="C1" objectid-class="C1$Id">
<extension vendor-name="kodo" key="jdbc-class-map" value="base">
<extension vendor-name="kodo" key="table" value="t1"/>
</extension>
<extension vendor-name="kodo" key="jdbc-version-ind"
value="version-number">
<extension vendor-name="kodo" key="column" value="revision"/>
</extension>
<field name="id" primary-key="true">
<extension vendor-name="kodo" key="jdbc-field-map" value="value">
<extension vendor-name="kodo" key="column" value="id"/>
</extension>
</field>
<field name="c2">
<extension vendor-name="kodo" key="jdbc-field-map" value="one-one">
<extension vendor-name="kodo" key="column.id" value="id2"/>
</extension>
</field>
</class>
<class name="C2" objectid-class="C2$Id">
<extension vendor-name="kodo" key="jdbc-class-map" value="base">
<extension vendor-name="kodo" key="table" value="t2"/>
</extension>
<extension vendor-name="kodo" key="jdbc-version-ind"
value="version-number">
<extension vendor-name="kodo" key="column" value="revision"/>
</extension>
<field name="id" primary-key="true">
<extension vendor-name="kodo" key="jdbc-field-map" value="value">
<extension vendor-name="kodo" key="column" value="id"/>
</extension>
</field>
<field name="c1">
<extension vendor-name="kodo" key="dependent" value="true"/>
<extension vendor-name="kodo" key="inverse-owner" value="c2"/>
<extension vendor-name="kodo" key="jdbc-field-map" value="one-one">
<extension vendor-name="kodo" key="table" value="t1"/>
<extension vendor-name="kodo" key="ref-column.id" value="id2"/>
<extension vendor-name="kodo" key="column.id" value="id"/>
</extension>
</field>
</class>
</package>
</jdo>
Needless to say, the extra column adds a lot of overhead, including the
addition of a second unique index, for no value other than working around
the caching defect.Tom-
The first thing that I think of whenever I see a problem like this is
that the equals() and hashCode() methods of your application identity
classes are not correct. Can you check them to ensure that they are
written in accordance to the guidelines at:
http://docs.solarmetric.com/manual.html#jdo_overview_pc_identity_application
If that doesn't help address the problem, can you post the code for your
application identity classes so we can double-check, and we will try to
determine what might be causing the problem.
In article <[email protected]>, Tom Landon wrote:
I have seen this a couple of times now. It is not consistent enough to
create a simple reproducible test case, so I will have to describe it to you
with an example and hope you can track it down. It only occurs when caching
is enabled.
Here are the classes:
class C1 { int id; C2 c2; }
class C2 { int id; C1 c1; }
Each class uses application identity using static nested Id classes: C1.Id
and C2.Id. What is unusual is that the same value is used for both
instances:
int id = nextId();
C1 c1 = new C1(id);
C2 c2 = new C2(id);
c1.c2 = c2;
c2.c1 = c1;
This all works fine using optimistic transactions with caching disabled.
Although the integer values are the same, the oids are unique because each
class defines its own unique oid class.
Here is the schema and mapping (this works with caching disabled but fails
with caching enabled):
table t1: column id integer, column revision integer, primary key (id)
table t2: column id integer, column revision integer, primary key (id)
<jdo>
<package name="test">
<class name="C1" objectid-class="C1$Id">
<extension vendor-name="kodo" key="jdbc-class-map" value="base">
<extension vendor-name="kodo" key="table" value="t1"/>
</extension>
<extension vendor-name="kodo" key="jdbc-version-ind"
value="version-number">
<extension vendor-name="kodo" key="column" value="revision"/>
</extension>
<field name="id" primary-key="true">
<extension vendor-name="kodo" key="jdbc-field-map" value="value">
<extension vendor-name="kodo" key="column" value="id"/>
</extension>
</field>
<field name="c2">
<extension vendor-name="kodo" key="jdbc-field-map" value="one-one">
<extension vendor-name="kodo" key="column.id" value="id"/>
</extension>
</field>
</class>
<class name="C2" objectid-class="C2$Id">
<extension vendor-name="kodo" key="jdbc-class-map" value="base">
<extension vendor-name="kodo" key="table" value="t2"/>
</extension>
<extension vendor-name="kodo" key="jdbc-version-ind"
value="version-number">
<extension vendor-name="kodo" key="column" value="revision"/>
</extension>
<field name="id" primary-key="true">
<extension vendor-name="kodo" key="jdbc-field-map" value="value">
<extension vendor-name="kodo" key="column" value="id"/>
</extension>
</field>
<field name="c1">
<extension vendor-name="kodo" key="dependent" value="true"/>
<extension vendor-name="kodo" key="inverse-owner" value="c2"/>
<extension vendor-name="kodo" key="jdbc-field-map" value="one-one">
<extension vendor-name="kodo" key="table" value="t1"/>
<extension vendor-name="kodo" key="ref-column.id" value="id"/>
<extension vendor-name="kodo" key="column.id" value="id"/>
</extension>
</field>
</class>
</package>
</jdo>
Because the ids are known to be the same, the primary key values are also
used as foreign key values. Accessing C2.c1 is always non-null when caching
is disabled. With caching is enabled C2.c1 is usually non-null but sometimes
null. When it is null we get warnings about dangling references to deleted
instances with id values of 0 and other similar warnings.
The workaround is to add a redundant column with the same value. For some
reason this works around the caching problem (this is unnecessary with
caching disabled):
table t1: column id integer, column id2 integer, column revision integer,
primary key (id), unique index (id2)
table t2: column id integer, column revision integer, primary key (id)
<jdo>
<package name="test">
<class name="C1" objectid-class="C1$Id">
<extension vendor-name="kodo" key="jdbc-class-map" value="base">
<extension vendor-name="kodo" key="table" value="t1"/>
</extension>
<extension vendor-name="kodo" key="jdbc-version-ind"
value="version-number">
<extension vendor-name="kodo" key="column" value="revision"/>
</extension>
<field name="id" primary-key="true">
<extension vendor-name="kodo" key="jdbc-field-map" value="value">
<extension vendor-name="kodo" key="column" value="id"/>
</extension>
</field>
<field name="c2">
<extension vendor-name="kodo" key="jdbc-field-map" value="one-one">
<extension vendor-name="kodo" key="column.id" value="id2"/>
</extension>
</field>
</class>
<class name="C2" objectid-class="C2$Id">
<extension vendor-name="kodo" key="jdbc-class-map" value="base">
<extension vendor-name="kodo" key="table" value="t2"/>
</extension>
<extension vendor-name="kodo" key="jdbc-version-ind"
value="version-number">
<extension vendor-name="kodo" key="column" value="revision"/>
</extension>
<field name="id" primary-key="true">
<extension vendor-name="kodo" key="jdbc-field-map" value="value">
<extension vendor-name="kodo" key="column" value="id"/>
</extension>
</field>
<field name="c1">
<extension vendor-name="kodo" key="dependent" value="true"/>
<extension vendor-name="kodo" key="inverse-owner" value="c2"/>
<extension vendor-name="kodo" key="jdbc-field-map" value="one-one">
<extension vendor-name="kodo" key="table" value="t1"/>
<extension vendor-name="kodo" key="ref-column.id" value="id2"/>
<extension vendor-name="kodo" key="column.id" value="id"/>
</extension>
</field>
</class>
</package>
</jdo>
Needless to say, the extra column adds a lot of overhead, including the
addition of a second unique index, for no value other than working around
the caching defect.
Marc Prud'hommeaux [email protected]
SolarMetric Inc. http://www.solarmetric.com -
How to alter or add foreign key constr to table having child rows or data
Hi,
I have a table by name DEPT in which the column DEPTNO is a primary key column and have data in it for all the columns . Now I have a EMP table where in the column DEPTNO is not having any constraint including foreign key constraint too. Now i have data in the EMP table for all the columns . now i would like to add the foreign key constraint to DEPTNO column in the EMP table referencing the DEPTNO column in the DEPT table. Both the table do not have any null values .
I need to add the foreign key without deleting the data in the EMP table.
Please advice.
Regards,
VineshHi,
I need to add the foreign key without deleting the data in the EMP table.Foreign key constraint can have only those values which are present in the primary key of the parent table or null.
When your tables are populated with values and then you are adding the constraint then,
the parent table data is only present in child table or null values.
Example
SQL> create table emp_bkp as select * from emp;
Table created.
SQL> create table dept_bkp as select * from dept;
Table created.
SQL> alter table dept_bkp
2 add constraint pk_deptno primary key(deptno);
Table altered.
SQL> select distinct deptno from emp_bkp;
DEPTNO
30
20
40
10
SQL> select deptno from dept_bkp;
DEPTNO
10
20
30
40
55
SQL> alter table emp_bkp
2 add constraint fk_deptno_bkp foreign key(deptno)
3 references dept_bkp(deptno);
Table altered.
SQL> alter table emp_bkp
2 drop constraint fk_deptno_bkp;
Table altered.
SQL> insert into emp_bkp(empno,ename,deptno) values(142,'Fenny',90);
1 row created.
SQL> alter table emp_bkp
2 add constraint fk_deptno_bkp foreign key(deptno)
3 references dept_bkp(deptno);
add constraint fk_deptno_bkp foreign key(deptno)
ERROR at line 2:
ORA-02298: cannot validate (SCOTT.FK_DEPTNO_BKP) - parent keys not found
SQL> update emp_bkp
2 set deptno=null
3 where empno=142;
1 row updated.
SQL> alter table emp_bkp
2 add constraint fk_deptno_bkp foreign key(deptno)
3 references dept_bkp(deptno);
Table altered.
SQL> insert into dept_bkp (deptno,dname)values(90,'IT');
1 row created.
SQL> update emp_bkp
2 set deptno=90
3 where empno=142;
1 row updated.Twinkle
Maybe you are looking for
-
Get error message when launching iTunes
Hi I have a problem with iTunes it's probaly my own fault but i hope someone in here know what i possibnly could do. I succesfully installed iTunes and used it for about two hours, then the electricity shut down in the house while iTunes was running.
-
IPAD MINI W/RETINA vs. IPAD MINI
Does the faster processor in the IPAD Mini with Retina Display improve the Face Time quality over regular IPAD Mini? Thanks
-
Hi Guys, I am creating a procedure which will check for the fileld in the database and if it returns NULL should go to sleep for 15 minutes and then will again check for the field. I am planning to use DBMS_LOCK.SLEEP function. Please can you suggest
-
IPad APN setting not being permanently saved
Have new iPad and the APN setting keeps changing back to default, any clues?
-
How to call an htm page or internet explorer
Hi, I have requirement to create help button in WEB UI and when clicking the help it should open my custom html page.. Currently i have the word document. Should i have to create a BSP application and if so how will i copy all the contents to the htm