Cascade delete problem(1+n call)

Hi Kodo Team.
I have two objects(one-many).
When I delete object, cascade delete works good.
But Kodo generates n+1 call.
Is this right?
As I know, Kodo generates just 1 call when I call one-many load.
Is there any way to only one call for delete?
my setting is below.
<jdo>
<package name="ep.prm.schedule.entity">
<class name="Schedule" objectid-class="SchedulePK">
<extension vendor-name="kodo" key="jdbc-class-map" value="base">
<extension vendor-name="kodo" key="pk-column" value="SCHCODE"/>
<extension vendor-name="kodo" key="table"
value="EPSCHEDULE.SC_TSCHEDULE"/>
</extension>
<extension vendor-name="kodo" key="jdbc-version-ind"
value="version-number">
<extension vendor-name="kodo" key="column" value="JDOVERSION"/>
</extension>
<!-- many sides-->
<field name="receivers" persistence-modifier="persistent">
<collection element-type="Receiver"/>
<extension vendor-name="kodo" key="fetch-group" value="receiver"/>
<extension vendor-name="kodo" key="inverse-logical" value="schedule"/>
<extension vendor-name="kodo" key="element-dependent" value="true"/>
<extension vendor-name="kodo" key="jdbc-field-map" value="one-many">
<extension vendor-name="kodo" key="table"
value="EPSCHEDULE.SC_TRECEIVER"/>
<extension vendor-name="kodo" key="ref-column.SCHCODE"
value="SCHCODE"/>
</extension>
</field>
</class>
</package>
</jdo>

Thanks for your help.
I said a separate delete statement.
"Marc Prud'hommeaux" <[email protected]> wrote in message
news:[email protected]...
Leejungryong-
Are you saying that Kodo will issue a separate delete statement for each
object that is deleted? If so, then that is expected behavior. Note that
batch support in Kodo should make those statements all be executed in a
single batch, so it isn't as much of a performance penalty as it might
first appear (provided you have a Performance Pack or Enterprise Edition
license).
If you mean something else by "Kodo generates n+1 call", can you
clarify? Is it issuing multiple separate selects or something? Some
logging output might help provide some more insight.
In article <[email protected]>, Leejungryong wrote:
Hi Kodo Team.
I have two objects(one-many).
When I delete object, cascade delete works good.
But Kodo generates n+1 call.
Is this right?
As I know, Kodo generates just 1 call when I call one-many load.
Is there any way to only one call for delete?
my setting is below.
<jdo>
<package name="ep.prm.schedule.entity">
<class name="Schedule" objectid-class="SchedulePK">
<extension vendor-name="kodo" key="jdbc-class-map" value="base">
<extension vendor-name="kodo" key="pk-column" value="SCHCODE"/>
<extension vendor-name="kodo" key="table"
value="EPSCHEDULE.SC_TSCHEDULE"/>
</extension>
<extension vendor-name="kodo" key="jdbc-version-ind"
value="version-number">
<extension vendor-name="kodo" key="column" value="JDOVERSION"/>
</extension>
<!-- many sides-->
<field name="receivers" persistence-modifier="persistent">
<collection element-type="Receiver"/>
<extension vendor-name="kodo" key="fetch-group" value="receiver"/>
<extension vendor-name="kodo" key="inverse-logical"
value="schedule"/>
<extension vendor-name="kodo" key="element-dependent" value="true"/>
<extension vendor-name="kodo" key="jdbc-field-map" value="one-many">
<extension vendor-name="kodo" key="table"
value="EPSCHEDULE.SC_TRECEIVER"/>
<extension vendor-name="kodo" key="ref-column.SCHCODE"
value="SCHCODE"/>
</extension>
</field>
</class>
</package>
</jdo>
Marc Prud'hommeaux
SolarMetric Inc.

Similar Messages

  • 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.
    jason

    Setting 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.

  • 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?

  • Problem in cascade-delete

    I've using cascade delete for delete rows from two entity beans.......
    but my problem is that if I'm doing it from ejb side...i.e. setting "fk_constraint" to false, and setting cascade-delete in ejb-jar.xml (& not in database), then its working fine....
    but if I remove these tags from the ejb-jar and in the database, specify foreign key and ON DELETE CASCADE, then its not working....it is giving the error...
    "can't add or update a child row...foreign key constraint fails".....
    I've read somewhere that this cascade delete option should be specified either on the ejb side or on the db side..and not on both the sides......but in run-time only ejb side is working...
    Plz. help me out coz I want the deletion from db side...as thr are some other tables not used in ejb but dependant on the one used in the ejb side.

    I think that you must specify <cascade-delete/> tag in ejb-jar.xml ONLY. But not in database.

  • Problems with cascading delete with entities

    I have a problem with cascading delete. I have two entities, Notebook and Note. One instance of Notebook can have several instances of Note in a Collection< Note >. The two entities are joined with a join table notebook_note that have two columns, the PK from the table of Notebook and Note. Note is not aware of the relation.
    From the user interface some elements of the collection<Note> can be added or deleted. I want to delete an element of that collection and make it persisted on the DB.
    If I add some Note elements to the collection and then I EntityManager.merge(notebook) (see public void persistNotebook() code below), I have all them persisted on the DB.
    However, if I delete some preexisting Note elements, after the merge I found deleted only the corresponding rows from the join table notebook_note BUT the rows in table Note, that was belonging to the deleted instance of Notebook, are NOT removed.
    Till now I found a way to do that (see code UserBean below), but I think that there is a simpler and so better way to do that! I hope to receive some suggestions!!
    @Entity
    public class Notebook implements Serializable {
    private static final long serialVersionUID = 1L;
    private String userName;
    private Collection<Note> notes;
    public Notebook() {
    public Notebook(String userName) {
    this.userName = userName;
    notes = new ArrayList<Note>();
    @Id
    public String getUserName() {
    return userName;
    public void setUserName(String userName) {
    this.userName = userName;
    @OneToMany(cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
    public Collection<Note> getNotes() {
    return notes;
    public void setNotes(Collection<Note> notes) {
    this.notes = notes;
    @Entity
    public class Note implements Serializable {
    String note;
    public void setNote(String note) {
    this.note = note;
    public String getNote() {
    return note;
    @Stateful
    public class UserBean implements UserRemote {
    private static Logger log = Logger.getLogger(UserRemote.class);
    @PersistenceContext(unitName = "etourism-ejbPU")
    private EntityManager em;
    &hellip;&hellip;
    @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
    public void persistNotebook() {
    NotebookDao notebookDao = new notebookDao(em);
    notebookDao.merge(notebook);
    em.flush();
    public void deleteNotebookNote (&hellip;.) {
    &hellip;..
    //noteFound is the note I want to delete from the Collection<Note>
    notebook.getEvents().remove(noteFound);
    persistNotebook(); //see method above
    *//I have also to explicitally delete the associated note!!!*
    *NoteDao noteDao = new NoteDao(em);*
    *noteDao.remove(noteDao.read(noteFound.getId()));*
    public void addNotebookNote(&hellip;..) {
    //add new note to the collection<Note> of the Notebook
    Note newNote = new Note(&hellip;);
    notebook.getNotes().add(newNote);
    persistNotebook();
    Where:
    public class NotebookDao extends JpaDao<Notebook, String> {
    &hellip;&hellip;
    public abstract class JpaDao<T, PK extends Serializable> implements IDao<T, PK> {
    &hellip;..
    public void remove(T entity) {
    getEntityManager().remove(entity);
    public void merge(T transientObject) {
    getEntityManager().merge(transientObject);
    }

    Thank you gimbal2 for your answer.
    You are right saying that a single Note could be bound to multiple notebooks, when using a join table, so the cascade cannot be done automatically by JPA.
    However, in my case, a single Note is bound only to one Notebook, so I would like to drop the join table (as you rightly suggest): however when I declare in the Notebook, a relation 1:N in this way ...
    @OneToMany(cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
    private Collection<Note> notes;
    ... the join table is automatically created during the deploy.
    Sorry, I am a beginner in EJB3. What kind of relational mapping annotation should I use to have a straight 1:N relationship that doesn't generate a join table?
    I think that it should be better to avoid to modify the relationship (es. cascade option) directly in the created db tables and let the logic be declared in the entity code definition: am I right?
    Waiting for your suggestion ...
    thank you very much
    Enzo
    Edited by: contini on May 22, 2009 5:37 AM

  • 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
    Dhiraj

    Is 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 hibernate 3

    i am having a problem deleting child object
    here is my code
    my hibernate files are generated with xdoclet
    I want to remove an object AFVALSTOF with all it's childs. the relationship is bi-directional. parent object is AFVALSTOF and as example child is OVERBRENGER. the relationship is obligated (not-null="true")
    By viewing the hibernate logging i can see that the key field of the child is update to null first but this is an obligated field.
    Can anyone help me on how to define my relationship so i can execute the cascade delete?
    This is a part of my parent object (AFVALSTOF) which causes
    problems
    /     private Set overbrenger = new HashSet( );
         * @hibernate.set tablename="overbrenger" lazy="true" inverse="false"
         * cascade="all-delete-orphan"
         * @hibernate.collection-key column="ovbr_afvs_id"
         * @hibernate.collection-one-to-many class="be.milieuinfo.imjv.database.model.afval.Overbrenger"
         * @return Set
         public Set getOverbrenger() {
              return overbrenger;
         * @param overbrenger
         * Overbrenger
         public void setOverbrenger(Set overbrenger) {
              this.overbrenger = overbrenger;
    THIS IS THE CHILD (OVERBRENGER) which has a relationship to the PARENT called AFVALSTOF
    private Afvalstof afvalstof ;
    * @hibernate.many-to-one column="ovbr_afvs_id" class=
         * "be.milieuinfo.imjv.database.model.afval.Afvalstof"
         * not-null="true" inverse="true" cascade="all"
    * @return Afvalstof
    public Afvalstof getAfvalstof() {
         return afvalstof ;
    * @param afvalstof
    public void setAfvalstof(Afvalstof afvalstof) {
         this.afvalstof = afvalstof ;
    thnx
    Stefaan

    <?xml version="1.0"?>
      <!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
      <class name="com.orly_otero.patterns.VO.ArticleVO" table="tblArticles">
        <id name="idArticle" type="long">
          <column name="id_Article" not-null="true"/>
          <generator class="native"/>
        </id>
        <property name="title" type="string">
          <column name="Title" length="200" not-null="true"/>
        </property>
        <property name="abstracT" type="string">
          <column name="Abstract" length="2000" not-null="true"/>
        </property>
        <property name="keywords" type="string">
          <column name="Keywords" length="200" not-null="true"/>
        </property>
        <property name="type" type="string">
          <column name="type" length="1" not-null="true"/>
        </property>
        <property name="position" type="integer">
          <column name="position" not-null="false"/>
        </property>
        <property  name="isBriefContribution" type="boolean">
          <column name="isBriefContribution" not-null="false"/>
        </property>
        <many-to-one name="issueVO" column="id_Issue" class="com.orly_otero.patterns.VO.IssueVO" not-null="true"/>
        <set name="authorsVO" table="tlbArticlesAuthors" lazy="true" cascade="save-update">
          <key column="id_Article"/>
          <many-to-many class="com.orly_otero.patterns.VO.AuthorVO" column="id_Author"/>
        </set>
        <set name="sectionsVO" inverse="true" lazy="true" cascade="all" order-by="position ASC">
          <key column="id_Article" not-null="true"/>
          <one-to-many class="com.orly_otero.patterns.VO.SectionVO"/>
        </set>
      </class>
    </hibernate-mapping>

  • EF database first cascades delete despite cascade is restricted in db and edmx setting End1/2 OnDelete = "None"

    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!
    Udo

    Hello,
    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.

  • Business Rule Delete Problem

    Problem definition:
    We have a business rule according to CDM ruleframe, but have a
    problem when we want to delete a row from a table. The problem
    occurs when the business rule is validated. The
    delete operation works fine when the business rule is not
    validated.
    Business rule: BR_FELT_0006_DEL
    Table: SLN_FELTER
    CAPI-package: SLN_FELTER_CAPI
    Trigger attr.: After triggering statement on DELETE operation
    The definition of this delete rule is the same as the definition
    in the Headstart demo application.
    This is a simple reconstruction of the error problem:
    SQL> delete from sln_felter
    2 where opve_oppgave_nr = 'RF-1061'
    3 and opde_oppgavekode = 1014
    4* and inar_inntektsaar = 2000
    SQL> /
    delete from sln_felter
    FEIL pe linje 1:
    ORA-20999:
    ORA-06512: ved "HST65.CG$ERRORS", line 565
    ORA-06512: ved "SLNHL6.CG$SLN_FELTER", line 474
    ORA-20998: Transaction Failed
    ORA-06512: ved "HST65.QMS$ERRORS", line 128
    ORA-06512: ved "HST65.QMS_TRANSACTION_MGT", line 822
    ORA-06512: ved "SLNHL6.CG$ADS_SLN_FELTER", line 51
    ORA-04088: feil ved utfxring av
    triggeren 'SLNHL6.CG$ADS_SLN_FELTER'
    ORA-06512: ved "SLNHL6.CG$ADS_SLN_FELTER", line 43
    ORA-04088: feil ved utfxring av
    triggeren 'SLNHL6.CG$ADS_SLN_FELTER'
    SQL> @d:\hsd65\hst\scripts\messages
    Feil QMS-00100: Ukjent feil ORA-01403: ingen data ble funnet:
    qms_transaction_mgt.perform_business_rule
    Kontakt brukerkontakten.
    PL/SQL-prosedyren ble fullfxrt.
    Error message should have been:
    SLX-00367: <p1>: Feltet kan ikke slettes hvis det har pestand
    fra skattyter
    We have debugged the PL/SQL code and the error occurs in the CDM
    ruleframe generated
    CAPI-definition and not in the business rule itself. This is a
    part of the code where we think the error occur:
    procedure br_felt_0006_del
    is
    l_rule_validation_result boolean := true;
    begin
    l_rule_validation_result := br_felt_0006_del
    ( g_current_row.opde_oppgavekode
    , g_current_row.inar_inntektsaar
    , g_current_row.id
    if not l_rule_validation_result
    or l_rule_validation_result is null
    then
    qms_transaction_mgt.process_rule_violation
    ( p_br_name => 'BR_FELT_0006_DEL'
    , p_msg_code => 'SLX-00367'
    , p_display_label => display_label
    , p_table_name => 'sln_felter'
    , p_table_rowid => get_rowid <------ When this procedure
    -- is calling the get_rowid function
    ); -- then we get the ORA-01403: No data found.
    end if; -- Business Rule is violated
    end br_felt_0006_del;
    |
    |
    |
    function get_rowid
    return rowid
    -- Purpose Return rowid of the current row
    -- Usage From br procedures
    is
    l_rowid rowid;
    begin
    if g_current_row.the_rowid is not null
    then
    l_rowid := g_current_row.the_rowid;
    else
    select rowid     <--- We suspect this is a
    -- problem in CDM ruleframe,
    into l_rowid -- because a deleted row is read !!!
    from sln_felter
    where id = g_current_row.id
    g_current_row.the_rowid := l_rowid;
    if g_stack_index is not null
    then
    g_felt_tbl(g_stack_index).the_rowid := l_rowid;
    end if; -- g_stack_index
    end if; -- g_current_row.the_rowid
    return l_rowid;
    end get_rowid;

    We also have a problem with the delete rule.
    In our case we have two tables persons and reservations.
    A person can place more reservations. The foreign key between them two is cascade delete.
    Our code is
    Purpose Persons can only be deleted three years after they made the last reservation
    Remarks
    Revision History
    When Who
    Revision What
    30-01-2002 REPOWN
    1.0 Using utility HSU_BRTR (revision 6.5.1.3)
    04-01-2002 MAST     
    1.1 Code toegevoegd
    l_rule_ok boolean := true;
    begin
    trace('br_klt002_del (f)');
    -- for instructions, see the Headstart User Guide
    l_rule_ok := not ati_rsg_capi.exists_row
    ( p_where => 'trunc(reservationdate ) >= add_months(trunc(sysdate),-36) and psn_id = '||p_old_id );
    --also tried
    --l_rule_ok :=  not ati_rsg_capi.exists_row
    -- ( p_where => 'trunc
    --(reservationdate ) >= add_months(trunc(sysdate),-36) and
    --psn_id = '||p_id   );
    return l_rule_ok;
    exception
    when others
    then
    qms$errors.unhandled_exception(PACKAGE_NAME||'.br_klt002_del (f)');
    end br_klt002_del;
    The problem is that this doesn't work. We are allowed to delete every person, even if they have a reservation yonger than three years.

  • 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,
    Nathan

    Were 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

  • Urgent :: How to do Cascade delete in OA Framework??

    I have built a employeeSearch page. The VO is based on only one EO that is EmployeeEO. This emp_id is referred in 4 other tables.
    what i want to do is ---
    when i delete the employee from employee Search Page. the corresponding records in other tables must get deleted.
    Can i do a Cascade delete over here.
    Please help.

    Use a pl/sql api to do the cascaded delete and call it from OAF.
    --Shiv                                                                                                                                                                                       

  • Cascade delete in CMP 1:M relationship

    All,
    I have 2 CMP entity beans with 1:M relationship and cascade delete option setup. All functions of Add/Mod are working fine.
    Even cascade delete is getting trigged but not executing properly every time. Out of more than 100 records in the child table, only 99 are getting cascade deleted. I am deploying the beans using embedded OC4J which comes with JDeveloper.
    Is anyone aware of any such limitations or faced similar problem before ? Database tables don't have any integrity constraint setup.
    Thanks,
    Dhiraj

    The problem is that by making the AddrXRef privately owned it cannot be reparented. Once it is removed from it's parent's list (either one) it will be deleted. To achieve what you're trying to do you'll need to delete the old incorrect AddrXRef and replace it with a new correct one.
    From the TopLink Developer's Guide[1]:
    When you tell TopLink that a relationship is privately owned, you are specifying that:
    * If the source of a privately owned relationship is deleted, then delete the target.
    * If you remove the reference to a target from a source, then delete the target.
    --Shaun
    [1] http://www.oracle.com/technology/products/ias/toplink/doc/10131/main/_html/uowbas007.htm#i1134011

  • 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>

  • (Kodo 4.1); DELETE issued even with @ForeignKey cascade delete?

    I'm wondering if anyone has seen this.
    I'm using Kodo 4.1, and MySQL, and I basically have the following situation (default generated IDs omitted):
    Code:
    @Entity
    public class A {
      @OneToMany(mappedBy="a", cascade=CascadeType.ALL, fetch=FetchType.EAGER)
      private Set<BB> bMany = new HashSet<BB>();
    @Entity
    public class BB {
    @ManyToOne(cascade={CascadeType.PERSIST, CascadeType.REFRESH })
    @JoinColumn(name = "A_ID")
    @ForeignKey(deleteAction=ForeignKeyAction.CASCADE)
    private A a;
    Schema:
    CREATE TABLE BB(
      A_ID BIGINT NOT NULL,
      CONSTRAINT FOREIGN KEY (A_ID) REFERENCES A(ID) ON DELETE CASCADE
    ) ENGINE=InnoDB;OK. I create an A with a couple of BBs in it, and persist it. Everything's fine. Now I call entityManager.remove() on the A instance I persisted, and I can see it issuing DELETE commands for BB after the DELETE for A, which produces an OptimisticLockException. I'd have hoped that the above @ForeignKey would have told Kodo not to issue such commands, knowing that the DB would do it.
    Any insight? Have I used @ForeignKey correctly (examples seem sparse in the documentation)? Is there a workaround, other than removing the cascade delete and doing deletions manually from code?
    Thanks,
    -- Bryan Loofbourrow

    1. Kodo needs to know the constraints set on mapped columns.
    Set the following properties in your configuration
    kodo.jdbc.SchemaFactory:native(ForeignKeys=true)
    2. Are you explictly setting kodo.jdbc.UpdateManager property?

  • Cascading detetion problem

    sir
    i facing problem only in delete case
    i have master detail form i set cascade relation when i delete button code is
    go_block('chartofacc');
         delete_record;
    commit_form;     
    when press exit button system ask me do you want to save change i press yes button but system not delete record and not exit stand last position and show that record
    how i delete my master record with child
    please give me idea how
    thanking you
    Aamir
    how i delete the record plseas give me idea

    try a new form with an easy master and detail block. create a default-cascading-delete relation between them and delete a record in the master manually. then save and check if it is deleted.
    if this test is completed make test 2:
    the same like before, but use your code :
    go_block('master');
    delete_record;
    commit;
    if this runs without problems, then you have to check, what the difference is between your testform2 and your originally form.
    Gerd

Maybe you are looking for

  • HT4910 Getting contacts to sync between iPhone and iPad

    I can't get my IPad to sync contacts with my IPhone Both are ios7.02 and synced with the same iTunes account on the same computer On the iPad in Settings under the Mail,contacts,calendars tab under the section labelled Contacts There are only 4sub-he

  • Monitor Compatibility Question

    I plan on purchasing a Mac Pro with the Radeon X1900 XT card in the near future. I have been shopping around for a good monitor, and the Dell UltraSharp 2407WFP (found here: http://accessories.us.dell.com/sna/productdetail.aspx?c=us&l=en&s=dhs&cs=19&

  • Exceptions are using rpc/encoded messages in documentwrapped mode

    Version: Weblogic 8.1SP3 I exposed a web service in documentwrapped(/literal) mode, and it seems weblogic is using rpc/encoded convention instead, to serialize Exception. I posted more infos on the Axis bugtracker : http://nagoya.apache.org/jira/brow

  • Document upload to WBS Element

    Hi Experts, How to upload documents to the WBS Elements. Do we have any BAPI which can be called for doing this. Thanks in advance.....

  • Query to show the output using SUBSTR or REGEXP_SUBSTR

    Hi All, I need a help.. I want to populate the data from varchar2 column, if it has the value 1,2,3 stored in it. Then I need to pick the values between the commas and show some string for each value available with commas. For Example: for '1' I shou