Cascade delete in database
Hi all,
i've tow entites, TCompte and THisto define as :
public class TCompte {
public class THisto {
@ManyToOne(optional = false)
TCompte theCompte;
}i've persist many instance of each.
when i try to remove an instance of TCompte i got an exception : secondary key constraint violation from table THisto.
So is there an anotation will cascade the remove of and TCompte to all instence of THisto witch reference to TCompte.
best regards.
Hi,
Please check the below annotation for cascade
@OneToMany(cascade=REMOVE, mappedBy="target table")
@ManyToOne(cascade=ALL)
For more reference check this (http://www.oracle.com/technology/products/ias/toplink/jpa/resources/toplink-jpa-annotations.html)
Regards,
P.Vinay Kumar
Similar Messages
-
Cascade or delete in database server, why if my EJB do it for me??
Hi,
I am in design phase of a database for my j2EE application. In the database desing i have some relationships entities, that have foreign keys. I have several options about foreign keys in the relationships, cascade deletes, restrict .... all in my database server.
But, when i am reading the referencial integrity of the entity EJBs CMP relationships, the entity beans make the cascade deletes automaticaly for maintain the relationsships.
Need i make my relationships in my database server with cascade delete options or leave it for my application server???
Another one, if i make relationships in my database server, why i need do it in my entity beans???
tanks, sorry for my poor englishHi Markus,
Tanks for your answer, if this tip only for entity beans with CMP???
For example, if i have some entity beans, one with CMP and other with JDO, or for example, an entity beans that use CMP and JDO for access to few tables (i dont know that it is possible or it a good design), how can i design the relationships update/delete cascades in my database server, all entity beans persistence types support his referencial integrity ?? if this if true i think that i forget the relationships updates/deletes cascades in my database server.
At this moment, i dont know what type of persistence i will use in my application server. I dont undertand yet wath approach i must follow, i design my database and after design my entity beans over this database or i must foget my database and beging with entity beans design first .... i have a big problem, i need read a lot of more.
Something for help me???
Very, very thanks -
Let the database doing cascade deletion for privateOwned relationship
Hi,
I have two tables: parent, child. I mapped the parent to child as a one-many private owned relationship. The child table have a foreign key reference back to parent table. The constraint is like this
alter table child add constraint FK_CONSTRAINT foreign key (parentid) reference parent (parentid) on delete cascade;
I would the cascade deletion is done by database (as it is "on delete cascade" in the constraint) rather by the toplink. (This is exactly what you will do when use JDBC. another reason is that if I let the TopLink do the cascade deletion, I got a deadlock! If I remove the cascade deletion from topLink, I do not have the deadlock).
Is there anyway I can turn off the cascade deletion from topLink, but at the same side keep the private owned relationship(because it is indeed privately owned)?
Any help is really appreciated.
jasonSetting a no-op sql solves the cascade deletion problem. However, if I really want to remove a child from the parently, I ends up using the same no-op sql. I can not delete child independently.
-
We are developing with Visual Studio 2013, Entity Framework 5, Oracle DB 11 via ODP.NET managed driver.
The edmx is generated/updated from database (database first). We generate POCO object using standard T4.
We have 2 tables with a master-detail foreign key relation, one to many. The foreign key in database does _not_ allow cascade deletes, so when you delete master row via SQL, you get error " ... child record found ... ".
The problem now is:
In Entity Framework, when i delete a record from the master table, then EF also deletes all corresponding detail records from the detail table! The restriction of the foreign key in database is ignored.
In edmx diagram, the properies End1 OnDelete / End2 OnDelete are set to "None", so i expect that on delete of a master row, EF should throw an error if detail rows exists.
How can i disable the cascading of the delete?
Here is the FK definition in edmx:
<Association Name="USR_USER_ROLES_ROLES_FK">
<End Role="USR_ROLES" Type="Self.USR_ROLES" Multiplicity="1" />
<End Role="USR_USER_ROLES" Type="Self.USR_USER_ROLES" Multiplicity="*" />
<ReferentialConstraint>
<Principal Role="USR_ROLES">
<PropertyRef Name="GES" />
<PropertyRef Name="PROJ" />
<PropertyRef Name="ROLE_NAME" />
</Principal>
<Dependent Role="USR_USER_ROLES">
<PropertyRef Name="GES" />
<PropertyRef Name="PROJ" />
<PropertyRef Name="ROLE_NAME" />
</Dependent>
</ReferentialConstraint>
</Association>
The delete of master row is done by calling:
ivDbCtx.USR_Roles.Local.Remove(role); // ivDbCtx is the DbContext, USR_Roles is the collection, role is the POCO object to be deleted.
Thank you very much for your help!
UdoHello,
For issues regarding ODP.NET managed driver, I would suggest you posting to oracle entity framework forum:
https://community.oracle.com/communications
There are oracle entity framework expects who will help you better.
Thanks for your understanding.
We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
Click
HERE to participate the survey. -
Cascade delete in container or database schema?
I am creating a database schema which I want to map EJB CMP Entity Beans onto. There are a number of relationships in the schema where I want to cascade deletion if a parent record is deleted and a number of relationships where I want to prevent deletion of parent records if child records exist for the relationship.
I am wondering whether it is better to implement this in the database schema (Oracle) or in the container (JBoss 3.2.2)? I believe it is possible to implement cascading delete in the container but I am not sure about preventing delete in the container? Is there a way I could do it programmatically? I want to use CMP though so I'm not sure there would be much scope for that.
Are there any rules as to which approach is better? Will the container have a problem if I implement it in the database schema? Obviously the ejbRemove may throw an exception if I prevent deletion in a relationship but that is fine. I believe it is not a good idea to implement it in both the container and schema as there will be a conflict when they both try to delete records.
Thanks.Container's cascade-deleting in jboss(tm)3.2.x working properly with any scope:
This example with 1 scope:
<relationships>
<ejb-relation>
<ejb-relation-name>Region-Town</ejb-relation-name>
<ejb-relationship-role>
<ejb-relationship-role-name>region-has-towns</ejb-relationship-role-name>
<multiplicity>One</multiplicity>
<relationship-role-source>
<ejb-name>RegionBean</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>regionTowns</cmr-field-name>
<cmr-field-type>java.util.Set</cmr-field-type>
</cmr-field>
</ejb-relationship-role>
<ejb-relationship-role>
<ejb-relationship-role-name>town-belongs-to-region</ejb-relationship-role-name>
<multiplicity>Many</multiplicity> <cascade-delete/>
<relationship-role-source>
<ejb-name>TownBean</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>region</cmr-field-name>
</cmr-field>
</ejb-relationship-role>
</ejb-relation>
</relationships> -
Db-cascade-delete for other databases than Oracle?
I have two entity beans with a one to many relationship. The database designers have implemented a cascading delete between the two tables for the entity beans. How should the deployment descriptors be written for this to work properly? From what I understand I will need to use the <cascade-delete /> tag in ejb-jar.xml and <db-cascade-delete /> in weblogic-cmp-jar.xml. However this document http://e-docs.bea.com/wls/docs81/ejb/entity.html states that <db-cascade-delete /> only works for Oracle, and I'm using DB2. Does this mean that I have to remove the cascading delete in the database and only enable it in ejb-jar.xml, or will <db-cascade-delete /> work for other databases than Oracle?
/BjörnTo get the certified answer I'd ask a tech support rep. Unofficially, if DB2 supports cascade delete then I would expect that the EJB container will work with that. There are issues surrounding certification of features against specific databases and I'm not up on all of these so I'd check with support.
-
Virtual private database and cascade delete
We can't secure rows deleted by cascade delete by vpd.
User "A" have right to delete row "1" but don't have right to delete row "2".
If user "A" delete row "1", database will delete also row "2" by cascade delete.
Why it is possible to delete row "2"?Either of the two options (a policy that queries the base table or propagating the security columns to the child tables) should work.
My preference from a data model standpoint would be to have a policy that queries the base table so that the security information can be maintained in exactly one place. But if your application is frequently querying the child tables without reference to the parent table, joining to the parent table, particularly if data volumes are such that an IN would be less than ideal, there may be performance issues to this approach.
Copying the columns creates a potential data integrity problem-- if you change the security on a base table row, you may forget to change the security on all the child records. But that issue may not be significant if the security is essentially static once the rows are created. And it's definitely easier to tune.
You may also want to create views that join the parent and child tables and grant users access to these views rather than to the child tables directly, which would allow you to have a single policy on the base table and get most of the benefits of the first option with less performance problems if data volumes make an IN less than ideal.
Justin -
Weblogic 9.1, EJB 2.0, Oracle 9i: Cascade delete Error
Hi All,
I am facing an error with the cascade-delete facility in ejb2.0 with weblogic 9.1
Assume that I have the following relation:
<ejb-relation>
<ejb-relation-name>TeacherEJB-StudentEJB</ejb-relation-name>
<ejb-relationship-role>
<ejb-relationship-role-name>teacher-has-student
</ejb-relationship-role-name>
<multiplicity>One</multiplicity>
<relationship-role-source>
<ejb-name>TeacherEJB</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>teacher</cmr-field-name>
</cmr-field>
</ejb-relationship-role>
<ejb-relationship-role>
<ejb-relationship-role-name>student-has-teacher
</ejb-relationship-role-name>
<multiplicity>Many</multiplicity>
<cascade-delete/>
<relationship-role-source>
<ejb-name>StudentEJB</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>student</cmr-field-name>
<cmr-field-type>java.util.Collection</cmr-field-type><cmr-field>
</ejb-relationship-role>
</ejb-relation>
Now when I have to delete one record from the DBSTUDENT table, what i do is the following:
StudentHomeLocal.remove(studentModel.getStudentId());
The above statement throws an SQLException staying it can't update TeacherID in DBSTUDENT (PK of DBTEACHER, FK in DBSTUDENT) with NULL.
The same code is working perfectly well in Weblogic 8.
I even tried deleting the local directly by the following statement:
StudentLocal.remove();
But this too doesn't work.
I also tried by removing the <cascade-delete/> attribute from the ejb-jar.xml file and updating the 'on-delete cascade' option in the database, but this too did not work.
There is another option of <db-cascade-delete> in weblogic-cmp-rdbms-jar.xml that I tried but this too did not work.
In short, I have tried the following cases but to no avail:
1. Mention cascade delete in ejb-jar.xml and nothing mentioned in weblogic-cmp-rdbms-jar.xml.jar and in the database.
2. Mention nothing in ejb-jar.xml and nothing mentioned in weblogic-cmp-rdbms-jar.xml.jar but 'on cascade delete' mentioned in the database.
3. Mention cascade delete in ejb-jar.xml and db-cascade-delete mentioned in weblogic-cmp-rdbms-jar.xml.jar and 'on cascade delete' in the database.
4. Remove all cascade delete from the ejb-jar.xml,the weblogic-cmp-rdbms-jar.xml and from the database.
Neither of the above work.
Kindly help ASAP.
Thanks in advance,
Sachidanand.Hi All,
I am facing an error with the cascade-delete facility in ejb2.0 with weblogic 9.1
Assume that I have the following relation:
<ejb-relation>
<ejb-relation-name>TeacherEJB-StudentEJB</ejb-relation-name>
<ejb-relationship-role>
<ejb-relationship-role-name>teacher-has-student
</ejb-relationship-role-name>
<multiplicity>One</multiplicity>
<relationship-role-source>
<ejb-name>TeacherEJB</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>teacher</cmr-field-name>
</cmr-field>
</ejb-relationship-role>
<ejb-relationship-role>
<ejb-relationship-role-name>student-has-teacher
</ejb-relationship-role-name>
<multiplicity>Many</multiplicity>
<cascade-delete/>
<relationship-role-source>
<ejb-name>StudentEJB</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>student</cmr-field-name>
<cmr-field-type>java.util.Collection</cmr-field-type><cmr-field>
</ejb-relationship-role>
</ejb-relation>
Now when I have to delete one record from the DBSTUDENT table, what i do is the following:
StudentHomeLocal.remove(studentModel.getStudentId());
The above statement throws an SQLException staying it can't update TeacherID in DBSTUDENT (PK of DBTEACHER, FK in DBSTUDENT) with NULL.
The same code is working perfectly well in Weblogic 8.
I even tried deleting the local directly by the following statement:
StudentLocal.remove();
But this too doesn't work.
I also tried by removing the <cascade-delete/> attribute from the ejb-jar.xml file and updating the 'on-delete cascade' option in the database, but this too did not work.
There is another option of <db-cascade-delete> in weblogic-cmp-rdbms-jar.xml that I tried but this too did not work.
In short, I have tried the following cases but to no avail:
1. Mention cascade delete in ejb-jar.xml and nothing mentioned in weblogic-cmp-rdbms-jar.xml.jar and in the database.
2. Mention nothing in ejb-jar.xml and nothing mentioned in weblogic-cmp-rdbms-jar.xml.jar but 'on cascade delete' mentioned in the database.
3. Mention cascade delete in ejb-jar.xml and db-cascade-delete mentioned in weblogic-cmp-rdbms-jar.xml.jar and 'on cascade delete' in the database.
4. Remove all cascade delete from the ejb-jar.xml,the weblogic-cmp-rdbms-jar.xml and from the database.
Neither of the above work.
Kindly help ASAP.
Thanks in advance,
Sachidanand. -
Problem with cascade delete and remove bean
I am working with two entity beans that map to two tables that have a foreign key relationship. Table B has a foreign key to A and in the database that foreign key is set for cascaded updates and cascaded deletes.
The problem occurs when the the sytem first tries to remove bean 1 (mapped to table A) and then remove bean 2 (mapped to B) where bean 2 is associated with bean 1 with a foreign key relationship. The first remove works but then when it tries to remove bean 2 it throws a very ugly "CORBA TRANSACTION_ROLLEDBACK 9998" Maybe exception. My guess is that the reason is because bean 2's reocrd in the database was deleted when bean 1 was removed but the 'bean object' was not removed from the container.
When I go into our Application Server and look at how it see's the tables, it show the wrong relationship. It shows a restrict delete and a restrict update realationship.
My question is, am I wrong to think that this is a application server problem or a configuration problem? It seems to me that attempting to remove a non-existant record should not cause an error. It won't cause any SQL exceptions. Is this a flawed viewpoint? As a work around I made sure that the dependent records are deleted first but it kind of defeats the point of cascaded deletes.
We have a limited number of support calls, should I use one or am I at fault here?If the database removes the record from the second
table, why is the system trying to remove it once
again? You should try to remove an entity from a
single place, should it be the database or the
application. Don't try to remove it twice.
Regards,
DimitarI could do this but it is a huge pain in my ass. The problem is that you might want to remove the dependent bean without removing it's parent. The object structure is a little questionable, I'll admit that. It is, as they say, the eleventh hour and I can't really change that now.
The way this work is that the server gets a list of objects marked either as new, modified, or deleted. It then relates those changes back to the database.
In this case we have two lists(which makes me realize where the class structure sucks.) In order to do what you suggest I would have to get all the deleted parent objects and then search all the deleted child objects for ones that have the parent's key in them.
It would be prefferable to fix the class structure but again this is not an option.
Anyone want to answer the question I asked? -
Real-time apply cascaded logical standby database
Hi
I have a primary database orcl
Pysical standby database orcl_std
Cascaded logical standby database orcl_tri which receives archivelogs from orcl_std
Real time apply is enabled both in orcl_std (physical standby) and orcl_tri (logical standby)
When I create a table in primary orcl, I am unable to see it on orcl_tri (Although real time apply is enabled)
However, when I switch log in primary, I can see the new table on orcl_tri.
My question is, why realtime apply is not working in my scenerio ?
orcl_std : ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION USING CURRENT LOGFILE;
orcl_tri: ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
Oracle 11.2.0.3.0Hi mseberg,
Thanks for your reply.
There is no load or network issue as I`ve just created these databases for the experiement.
I have the same output from standby and primary databases.
SQL> select bytes/1024/1024 from v$standby_log;
BYTES/1024/1024
10
10
10I can see below output in standby alertlog
Fri Nov 16 08:39:51 2012
ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE
ALTER DATABASE START LOGICAL STANDBY APPLY (orcl)
with optional part
IMMEDIATE
Attempt to start background Logical Standby process
Fri Nov 16 08:39:51 2012
LSP0 started with pid=37, OS id=16141
Completed: ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE
LOGMINER: Parameters summary for session# = 1
LOGMINER: Number of processes = 3, Transaction Chunk Size = 201
LOGMINER: Memory Size = 30M, Checkpoint interval = 150M
LOGMINER: SpillScn 1953318, ResetLogScn 995548
LOGMINER: summary for session# = 1
LOGMINER: StartScn: 0 (0x0000.00000000)
LOGMINER: EndScn: 0 (0x0000.00000000)
LOGMINER: HighConsumedScn: 1955287 (0x0000.001dd5d7)
LOGMINER: session_flag: 0x1
LOGMINER: Read buffers: 16
Fri Nov 16 08:39:55 2012
LOGMINER: session#=1 (Logical_Standby$), reader MS00 pid=30 OS id=16145 sid=49 started
Fri Nov 16 08:39:55 2012
LOGMINER: session#=1 (Logical_Standby$), builder MS01 pid=39 OS id=16149 sid=44 started
Fri Nov 16 08:39:55 2012
LOGMINER: session#=1 (Logical_Standby$), preparer MS02 pid=40 OS id=16153 sid=50 started
LOGMINER: Turning ON Log Auto Delete
LOGMINER: Begin mining logfile during commit scan for session 1 thread 1 sequence 202, +DATA/orcl_std/archivelog/2012_11_15/thread_1_seq_202.349.799450179
LOGMINER: End mining logfiles during commit scan for session 1
LOGMINER: Turning ON Log Auto Delete
LOGMINER: Begin mining logfile for session 1 thread 1 sequence 202, +DATA/orcl_std/archivelog/2012_11_15/thread_1_seq_202.349.799450179
LOGMINER: End mining logfile for session 1 thread 1 sequence 202, +DATA/orcl_std/archivelog/2012_11_15/thread_1_seq_202.349.799450179
Fri Nov 16 08:40:04 2012
LOGSTDBY Analyzer process AS00 started with server id=0 pid=41 OS id=16162
Fri Nov 16 08:40:05 2012
LOGSTDBY Apply process AS03 started with server id=3 pid=45 OS id=16175
Fri Nov 16 08:40:05 2012
LOGSTDBY Apply process AS04 started with server id=4 pid=46 OS id=16179
Fri Nov 16 08:40:05 2012
LOGSTDBY Apply process AS01 started with server id=1 pid=42 OS id=16167
Fri Nov 16 08:40:05 2012
LOGSTDBY Apply process AS05 started with server id=5 pid=47 OS id=16183
Fri Nov 16 08:40:05 2012
LOGSTDBY Apply process AS02 started with server id=2 pid=44 OS id=16171Do you think real-time apply wasnt setup properly ? -
Foreign keys on cascade delete rules are not migrated
hello folks, i tried to migrate a database from sql server 2005 to oracle 10g express using SQL Developer 1.5.5 and noticed that the cascade delete option of the foreign keys was ignored by the tool.
I'd like to know if it's a limitation of the tool or a bug. I have over 500 fks with such configuration and it would be simply impossible to manually configure every migrated fk in oracle.
thanks all.Thanks,
Already logged:
Bug 7652822 - ON DELETE CASCADE IS LOST DURING MIGRATION
-Turloch -
Cascade deletes in kodo 3.0.1
I'm trying to use the cascade delete option and am having problems.
Here is my jdo file:
<class name="RoomScene" objectid-class="RoomSceneId">
<extension vendor-name="kodo" key="jdbc-class-map"
value="base">
<extension vendor-name="kodo" key="table"
value="t_roomscene"/>
<extension vendor-name="kodo" key="pk-column" value="id_i"/>
</extension>
<extension vendor-name="kodo" key="jdbc-version-ind"
value="version-number">
<extension vendor-name="kodo" key="column"
value="rowversion_i"/>
</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_i"/>
</extension>
</field>
<field name="itemLinks">
<collection element-type="ItemLink"/>
<extension vendor-name="kodo" key="element-delete-action"
value="cascade"/>
<extension vendor-name="kodo" key="jdbc-field-map"
value="one-many">
<extension vendor-name="kodo" key="table"
value="t_mapitemroomscene"/>
<extension vendor-name="kodo" key="ref-column.id_i"
value="roomscene_id_i"/>
</extension>
</field>
</class>
<class name="ItemLink" objectid-class="ItemLinkId">
<extension vendor-name="kodo" key="jdbc-class-map" value="base">
<extension vendor-name="kodo" key="table" value="t_mapitemroomscene"/>
<extension vendor-name="kodo" key="pk-column" value="id_i"/>
</extension>
<extension vendor-name="kodo" key="jdbc-version-ind"
value="version-number">
<extension vendor-name="kodo" key="column" value="rowversion_i"/>
</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_i"/>
</extension>
</field>
<field name="item">
<extension vendor-name="kodo" key="jdbc-field-map" value="one-one">
<extension vendor-name="kodo" key="column.id_vc" value="item_id_vc"/>
</extension>
</field>
<field name="roomScene">
<extension vendor-name="kodo" key="jdbc-field-map" value="one-one">
<extension vendor-name="kodo" key="column.id_i"
value="roomscene_id_i"/>
</extension>
</field>
<field name="linkText">
<extension vendor-name="kodo" key="jdbc-field-map" value="value">
<extension vendor-name="kodo" key="column" value="linktext_vc"/>
</extension>
</field>
</class>
(each RoomScene has many ItemLinks)
but when I delete my RoomScene object, I get the following exception:
"kodo.util.FatalDataStoreException: ERROR: ExecUpdate: Fail to add
null value in not null attribute roomscene_id_i {prepstmnt 2515391
UPDATE t_mapitemroomscene SET roomscene_id_i = ? WHERE roomscene_id_i =
?} [code=0, state=null]
NestedThrowables:
com.solarmetric.jdbc.ReportingSQLException: ERROR: ExecUpdate: Fail to
add null value in not null attribute roomscene_id_i {prepstmnt 2515391
UPDATE t_mapitemroomscene SET roomscene_id_i = ? WHERE roomscene_id_i =
?} [code=0, state=null]
java.sql.SQLException: ERROR: ExecUpdate: Fail to add null value in
not null attribute roomscene_id_i
at
kodo.jdbc.sql.SQLExceptions.getFatalDataStore(SQLExceptions.java:42)
at
kodo.jdbc.sql.SQLExceptions.getFatalDataStore(SQLExceptions.java:24)
at
kodo.jdbc.runtime.JDBCStoreManager.flush(JDBCStoreManager.java:510)
at
kodo.runtime.PersistenceManagerImpl.flushInternal(PersistenceManagerImpl
..java:788)
at
kodo.runtime.PersistenceManagerImpl.beforeCompletion(PersistenceManagerI
mpl.java:644)
at
kodo.runtime.LocalManagedRuntime.commit(LocalManagedRuntime.java:69)
at
kodo.runtime.PersistenceManagerImpl.commit(PersistenceManagerImpl.java:
416)
at
net.mastertile.www.room.action.RoomSceneDeleteAction.executeLogic(RoomSc
eneDeleteAction.java:27)
my kodo.properties file is like this:
javax.jdo.PersistenceManagerFactoryClass:
kodo.jdbc.runtime.JDBCPersistenceManagerFactory
javax.jdo.option.RetainValues: true
javax.jdo.option.RestoreValues: true
javax.jdo.option.Optimistic: true
javax.jdo.option.NontransactionalWrite: false
javax.jdo.option.NontransactionalRead: true
javax.jdo.option.Multithreaded: false
javax.jdo.option.MsWait: 5000
javax.jdo.option.MinPool: 1
javax.jdo.option.MaxPool: 200
javax.jdo.option.IgnoreCache: true
javax.jdo.option.ConnectionFactoryName=java:comp/env/jdbc/default
javax.jdo.option.ConnectionFactory2Name=java:comp/env/jdbc/default
kodo.LicenseKey=XXXXXXXXXXX
kodo.jdbc.MappingFactory=metadata
kodo.DataCache=false
kodo.RemoteCommitProvider=sjvm
kodo.FlushBeforeQueries=false
kodo.jdbc.ForeignKeyConstraints=true
kodo.jdbc.SequenceFactory: native
kodo.jdbc.SchemaFactory: dynamic
We are using postgresql.
Thanks,
NathanWere the foreign keys generated in the database? You also may want to
try using the *-dependent extensions.
Nathan Voxland wrote:
I'm trying to use the cascade delete option and am having problems.
Here is my jdo file:
<class name="RoomScene" objectid-class="RoomSceneId">
<extension vendor-name="kodo" key="jdbc-class-map"
value="base">
<extension vendor-name="kodo" key="table"
value="t_roomscene"/>
<extension vendor-name="kodo" key="pk-column" value="id_i"/>
</extension>
<extension vendor-name="kodo" key="jdbc-version-ind"
value="version-number">
<extension vendor-name="kodo" key="column"
value="rowversion_i"/>
</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_i"/>
</extension>
</field>
<field name="itemLinks">
<collection element-type="ItemLink"/>
<extension vendor-name="kodo" key="element-delete-action"
value="cascade"/>
<extension vendor-name="kodo" key="jdbc-field-map"
value="one-many">
<extension vendor-name="kodo" key="table"
value="t_mapitemroomscene"/>
<extension vendor-name="kodo" key="ref-column.id_i"
value="roomscene_id_i"/>
</extension>
</field>
</class>
<class name="ItemLink" objectid-class="ItemLinkId">
<extension vendor-name="kodo" key="jdbc-class-map" value="base">
<extension vendor-name="kodo" key="table" value="t_mapitemroomscene"/>
<extension vendor-name="kodo" key="pk-column" value="id_i"/>
</extension>
<extension vendor-name="kodo" key="jdbc-version-ind"
value="version-number">
<extension vendor-name="kodo" key="column" value="rowversion_i"/>
</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_i"/>
</extension>
</field>
<field name="item">
<extension vendor-name="kodo" key="jdbc-field-map" value="one-one">
<extension vendor-name="kodo" key="column.id_vc" value="item_id_vc"/>
</extension>
</field>
<field name="roomScene">
<extension vendor-name="kodo" key="jdbc-field-map" value="one-one">
<extension vendor-name="kodo" key="column.id_i"
value="roomscene_id_i"/>
</extension>
</field>
<field name="linkText">
<extension vendor-name="kodo" key="jdbc-field-map" value="value">
<extension vendor-name="kodo" key="column" value="linktext_vc"/>
</extension>
</field>
</class>
(each RoomScene has many ItemLinks)
but when I delete my RoomScene object, I get the following exception:
"kodo.util.FatalDataStoreException: ERROR: ExecUpdate: Fail to add
null value in not null attribute roomscene_id_i {prepstmnt 2515391
UPDATE t_mapitemroomscene SET roomscene_id_i = ? WHERE roomscene_id_i =
?} [code=0, state=null]
NestedThrowables:
com.solarmetric.jdbc.ReportingSQLException: ERROR: ExecUpdate: Fail to
add null value in not null attribute roomscene_id_i {prepstmnt 2515391
UPDATE t_mapitemroomscene SET roomscene_id_i = ? WHERE roomscene_id_i =
?} [code=0, state=null]
java.sql.SQLException: ERROR: ExecUpdate: Fail to add null value in
not null attribute roomscene_id_i
at
kodo.jdbc.sql.SQLExceptions.getFatalDataStore(SQLExceptions.java:42)
at
kodo.jdbc.sql.SQLExceptions.getFatalDataStore(SQLExceptions.java:24)
at
kodo.jdbc.runtime.JDBCStoreManager.flush(JDBCStoreManager.java:510)
at
kodo.runtime.PersistenceManagerImpl.flushInternal(PersistenceManagerImpl
.java:788)
at
kodo.runtime.PersistenceManagerImpl.beforeCompletion(PersistenceManagerI
mpl.java:644)
at
kodo.runtime.LocalManagedRuntime.commit(LocalManagedRuntime.java:69)
at
kodo.runtime.PersistenceManagerImpl.commit(PersistenceManagerImpl.java:
416)
at
net.mastertile.www.room.action.RoomSceneDeleteAction.executeLogic(RoomSc
eneDeleteAction.java:27)
my kodo.properties file is like this:
javax.jdo.PersistenceManagerFactoryClass:
kodo.jdbc.runtime.JDBCPersistenceManagerFactory
javax.jdo.option.RetainValues: true
javax.jdo.option.RestoreValues: true
javax.jdo.option.Optimistic: true
javax.jdo.option.NontransactionalWrite: false
javax.jdo.option.NontransactionalRead: true
javax.jdo.option.Multithreaded: false
javax.jdo.option.MsWait: 5000
javax.jdo.option.MinPool: 1
javax.jdo.option.MaxPool: 200
javax.jdo.option.IgnoreCache: true
javax.jdo.option.ConnectionFactoryName=java:comp/env/jdbc/default
javax.jdo.option.ConnectionFactory2Name=java:comp/env/jdbc/default
kodo.LicenseKey=XXXXXXXXXXX
kodo.jdbc.MappingFactory=metadata
kodo.DataCache=false
kodo.RemoteCommitProvider=sjvm
kodo.FlushBeforeQueries=false
kodo.jdbc.ForeignKeyConstraints=true
kodo.jdbc.SequenceFactory: native
kodo.jdbc.SchemaFactory: dynamic
We are using postgresql.
Thanks,
Nathan
Steve Kim
[email protected]
SolarMetric Inc.
http://www.solarmetric.com -
Privately Owned and Cascade Delete in DB
HI,
What is the relationship between setting privately owned in Toplink vs creating a cascade delete in Oracle DB? If I've the cascade delete in DB then what is the advantage of setting the privately owned flag in toplink?
ThanksIf you only set the cascade delete option in the database, then TopLink will have no knowledge that the private object was deleted (or that it is private in general). This would mean that TopLink would not remove the private object from the cache or process it as have being deleted. In general this may not cause your app any direct issues if you never read the private object directly as it will eventually garbage collect from the cache.
Making the relationship privately own in TopLink will also ensure the following:
- If you replace the private object with another, or set it to null, TopLink will delete the old object on the update of the source. Cascade delete only works on deletion.
- If the relationship is a 1-m and you remove an object from the collection it will be removed.
- If you refresh the parent object, by default the child will also be refreshed.
- If you merge the parent object, by default the child will also be merged. -
Problem with cascade delete in CMP one-to-one relationship
I am not able to cascade delete for one-to-one relationship. Even though relationship seems to be setup correctly, record from the second table is not deleted.
Following is the structure of tables i am using:
First Table(vcc_lrmc) -- LRMCBean
lrmc_id pk (Bean field is id)
lrmc_dtl_id (Bean field islrmcDtlId)
Second Table (vcc_lrmc_dtl) -- LRMCDetailBean
lrmc_dtl_id (pk) (Bean field islrmcDtlId)
lrmc_id (Bean field id)
One to one bidirectional relationship has been setup with CMR fields moreLRMC and mainLRMC.
section of ejb-jar is as follows:
<ejb-relation>
<ejb-relation-name>LRMCMainToDetail</ejb-relation-name>
<ejb-relationship-role>
<multiplicity>One</multiplicity>
<relationship-role-source>
<ejb-name>LRMC</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>moreLRMC</cmr-field-name>
</cmr-field>
</ejb-relationship-role>
<ejb-relationship-role>
<multiplicity>One</multiplicity>
<cascade-delete/>
<relationship-role-source>
<ejb-name>LRMCDetail</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>mainLRMC</cmr-field-name>
</cmr-field>
</ejb-relationship-role>
</ejb-relation>
section of orion-ejb-jar is as follows:(Bidirectional mapping)
<entity-deployment name="LRMC" data-source="jdbc/VCCDS" table="VCC_LRMC">
<cmp-field-mapping name="moreLRMC">
<entity-ref home="LRMCDetail">
<cmp-field-mapping name="lrmcDtlId" persistence-name="LRMC_DTL_ID"/>
</entity-ref>
</cmp-field-mapping>
</entity-deployment>
<entity-deployment name="LRMCDetail" data-source="jdbc/VCCDS" table="VCC_LRMC_DTL">
<cmp-field-mapping name="mainLRMC">
<entity-ref home="LRMC">
<cmp-field-mapping name="id" persistence-name="LRMC_ID"/>
</entity-ref>
</cmp-field-mapping>
</entity-deployment>
Is there anything else need to be setup for Cascade delete or is there anything wrong the way one-to-one relationship has been setup.
Pls. advice.
Thanks
DhirajIs it happening because of this bug.
Cannot create a 1:1 bi-directional CMR for entity beans when database tables are reverse engineered. (2447364)
Anyone, any idea on this ?
Cheers,
Dhiraj -
Cascade delete in many to many association
Hi All,
I have a usecase, there is an association with many to many cardinality between 3 EO's. If i delete any record in master, the corresponding childs all should delete.
So appreciate if any alternatives on above usecase. Thanks in advanceHi,
cascade delete is a function of the database. When you enable cascade delete for an entity operation then this only produces the proper SQL code for deleting a data object. If you have a many-to-many relation then this means you have multiple master and child records, which I think makes your "If i delete any record in master, the corresponding childs all should delete" impossible.
for what its worth, please read
Creating a Business Domain Layer Using Entity Objects - 11g Release 2 (11.1.2.3.0)
to learn how to parse and delete detail records from an entity object
http://docs.oracle.com/cd/E35521_01/web.111230/e16182/bcentities.htm#CEGJAFCF
The last document is about posting orders (e.g. create a master record before you create detail records). However, with a few changes you can reverse this to perform a delete operation (just add this code to the entity impl classes of the entities so they delete their child objects
Frank
Maybe you are looking for
-
Adobe elements photo shop full install does not work. How do I get it to work?
It worked before and now it doesn't. For some reason the computer is treating the full install as if it were a demo. I already registered the product when I first installed...... Only the organizer works now. I uninstalled and re installed but stil
-
Suddenly, Reader X (10.1.2) does not work on my XP-Pro SP3 machine (it worked fine until today). I have uninstalled Reader, downloaded and reinstalled it from your site: same issue. I can open the program (interestingly, task manager shows two lines
-
Final Cut - Harddrive problem?
I was having some issues with FCP earlier today (certain playbacks were funky). I figured that there was some issue with my settings. However, when I returned to the project and tried to start-up of Power MAC G5, the start-up seemed to fail. The moni
-
Hi Dear; how can i use the DTW in SDK? best regards;
-
How To Securely Mount iPad On Glass?
As a requirement to display an app in an office I am looking for suggestions how I can securely mount an iPad onto an internal glass window. Anybody done this before or have suggestions on how to do it?