Objects stored in DB despite optimistic locking

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Objects stored in DB despite optimistic locking

Kumarunster
Hello

How works optimistic locking?

I understand it such (see
http://cwiki.apache.org/CAY/optimistic-locking-explained.html):

if no data changed in the dataset, is this data record not updated in the
database.

i have following problem:
first run:
i have 20000 datarecords in a table 1. This dataset I copy with cayenne into
another table 2.
I use setProperty method, like this:

attrListParameter =
p_dataObjectInt.getObjEntity().getAttributes().toArray();

int nSizeAttrListParameter = attrListParameter.length;
ObjAttribute attr;
String sAttrName;

for(int i = 0; i<nSizeAttrListParameter; i++)
{
   attr = (ObjAttribute) attrListParameter[i];
   sAttrName = attr.getName();
   p_dataObject.writeProperty(sAttrName,
p_dataObjectInt.readProperty(sAttrName));
}

I make commit to the end, commit duratation is 11 sec.

second run:
i have 20000 datarecords in a table 1 and in table 2.
I copy this 20000 records once again into table 2 (the data is not changed!)
with code from above and commit changes, but commit duratation is also 11
sec.!!!! No data has changed!, optimistic locking is set in my
XXX.map.xmlfor class from p_dataObject and for all attributes.

in the second run is to be sent nevertheless update for all 20000
datarecords, or?

what i do wrong???

with thanks, nikolai
Reply | Threaded
Open this post in threaded view
|

Re: Objects stored in DB despite optimistic locking

Kumarunster
I found the problem and probably a bug in cayenne...

here is a part of my log:

on first run, insert:

INFO  QueryLogger: INSERT INTO WPTAB (WPTAB_AENKZ, WPTAB_ISIN, WPTAB_LOEKZ)
VALUES (?, ?, ?)
INFO  QueryLogger: [bind: ' ', 'DE0000044444', ' ']

Attention, in ' ' is one blank!!!!

on second run,  update:

INFO  QueryLogger: UPDATE WPTAB SET WPTAB_AENKZ = ?, WPTAB_LOEKZ = ? WHERE
WPTAB_ISIN = ?
INFO  QueryLogger: [bind: ' ', ' ', 'DE0000044444']

Attention, and here in ' ' is one blank!!!!
The Fields WPTAB_AENKZ and WPTAB_LOEKZ has not changed, why cayenne does
those update?

Have everybody a tip for me, what can I do?

thanks and best regards,

Nikolai



2006/7/27, Nikolai Raitsev <[hidden email]>:

>
> Hello
>
> How works optimistic locking?
>
> I understand it such (see
> http://cwiki.apache.org/CAY/optimistic-locking-explained.html):
>
> if no data changed in the dataset, is this data record not updated in the
> database.
>
> i have following problem:
> first run:
> i have 20000 datarecords in a table 1. This dataset I copy with cayenne
> into another table 2.
> I use setProperty method, like this:
>
> attrListParameter =
> p_dataObjectInt.getObjEntity().getAttributes().toArray();
>
> int nSizeAttrListParameter = attrListParameter.length;
> ObjAttribute attr;
> String sAttrName;
>
> for(int i = 0; i<nSizeAttrListParameter; i++)
> {
>    attr = (ObjAttribute) attrListParameter[i];
>    sAttrName = attr.getName();
>    p_dataObject.writeProperty(sAttrName,
> p_dataObjectInt.readProperty(sAttrName));
> }
>
> I make commit to the end, commit duratation is 11 sec.
>
> second run:
> i have 20000 datarecords in a table 1 and in table 2.
> I copy this 20000 records once again into table 2 (the data is not
> changed!) with code from above and commit changes, but commit duratation is
> also 11 sec.!!!! No data has changed!, optimistic locking is set in my
> XXX.map.xml for class from p_dataObject and for all attributes.
>
> in the second run is to be sent nevertheless update for all 20000
> datarecords, or?
>
> what i do wrong???
>
> with thanks, nikolai
>
>
>
Reply | Threaded
Open this post in threaded view
|

Re: Objects stored in DB despite optimistic locking

Kumarunster
Escuse me, that is my and SQL Server problem, not from cayenne...

a blank in SQL Server is no blank...

best regards,

Nikolai

ps. but, is it possibility to build the examination that ' '== '' (blank
equals not blank) into cayenne?

2006/7/27, Nikolai Raitsev <[hidden email]>:

>
> I found the problem and probably a bug in cayenne...
>
> here is a part of my log:
>
> on first run, insert:
>
> INFO  QueryLogger: INSERT INTO WPTAB (WPTAB_AENKZ, WPTAB_ISIN,
> WPTAB_LOEKZ) VALUES (?, ?, ?)
> INFO  QueryLogger: [bind: ' ', 'DE0000044444', ' ']
>
> Attention, in ' ' is one blank!!!!
>
> on second run,  update:
>
> INFO  QueryLogger: UPDATE WPTAB SET WPTAB_AENKZ = ?, WPTAB_LOEKZ = ? WHERE
> WPTAB_ISIN = ?
> INFO  QueryLogger: [bind: ' ', ' ', 'DE0000044444']
>
> Attention, and here in ' ' is one blank!!!!
> The Fields WPTAB_AENKZ and WPTAB_LOEKZ has not changed, why cayenne does
> those update?
>
> Have everybody a tip for me, what can I do?
>
> thanks and best regards,
>
> Nikolai
>
>
>
> 2006/7/27, Nikolai Raitsev <[hidden email]>:
>
> > Hello
> >
> > How works optimistic locking?
> >
> > I understand it such (see
> > http://cwiki.apache.org/CAY/optimistic-locking-explained.html):
> >
> > if no data changed in the dataset, is this data record not updated in
> > the database.
> >
> > i have following problem:
> > first run:
> > i have 20000 datarecords in a table 1. This dataset I copy with cayenne
> > into another table 2.
> > I use setProperty method, like this:
> >
> > attrListParameter =
> > p_dataObjectInt.getObjEntity().getAttributes().toArray();
> >
> > int nSizeAttrListParameter = attrListParameter.length;
> > ObjAttribute attr;
> > String sAttrName;
> >
> > for(int i = 0; i<nSizeAttrListParameter; i++)
> > {
> >    attr = (ObjAttribute) attrListParameter[i];
> >    sAttrName = attr.getName();
> >    p_dataObject.writeProperty(sAttrName,
> > p_dataObjectInt.readProperty(sAttrName));
> > }
> >
> > I make commit to the end, commit duratation is 11 sec.
> >
> > second run:
> > i have 20000 datarecords in a table 1 and in table 2.
> > I copy this 20000 records once again into table 2 (the data is not
> > changed!) with code from above and commit changes, but commit duratation is
> > also 11 sec.!!!! No data has changed!, optimistic locking is set in my
> > XXX.map.xml for class from p_dataObject and for all attributes.
> >
> > in the second run is to be sent nevertheless update for all 20000
> > datarecords, or?
> >
> > what i do wrong???
> >
> > with thanks, nikolai
> >
> >
> >
>
Reply | Threaded
Open this post in threaded view
|

Re: Objects stored in DB despite optimistic locking

Mike Kienenberger
Nikolai,

I'm not completely following what you're asking for.

Perhaps you're asking how you can make an empty string into a null
automatically?  Put this method into a BaseDataObject class (add this
class between CayenneDataObject and your generated classes).

    public void writeProperty(String propName, Object value)
    {
        // Oracle can't handle empty strings, so convert them into
nulls automatically.
        // We'll never use an empty string as a database value.
        if ( (value instanceof String) && (0 == ((String)value).length()) )
        {
            value = null;
        }

        super.writeProperty(propName, value);
    }



On 7/27/06, Nikolai Raitsev <[hidden email]> wrote:

> Escuse me, that is my and SQL Server problem, not from cayenne...
>
> a blank in SQL Server is no blank...
>
> best regards,
>
> Nikolai
>
> ps. but, is it possibility to build the examination that ' '== '' (blank
> equals not blank) into cayenne?
>
> 2006/7/27, Nikolai Raitsev <[hidden email]>:
> >
> > I found the problem and probably a bug in cayenne...
> >
> > here is a part of my log:
> >
> > on first run, insert:
> >
> > INFO  QueryLogger: INSERT INTO WPTAB (WPTAB_AENKZ, WPTAB_ISIN,
> > WPTAB_LOEKZ) VALUES (?, ?, ?)
> > INFO  QueryLogger: [bind: ' ', 'DE0000044444', ' ']
> >
> > Attention, in ' ' is one blank!!!!
> >
> > on second run,  update:
> >
> > INFO  QueryLogger: UPDATE WPTAB SET WPTAB_AENKZ = ?, WPTAB_LOEKZ = ? WHERE
> > WPTAB_ISIN = ?
> > INFO  QueryLogger: [bind: ' ', ' ', 'DE0000044444']
> >
> > Attention, and here in ' ' is one blank!!!!
> > The Fields WPTAB_AENKZ and WPTAB_LOEKZ has not changed, why cayenne does
> > those update?
> >
> > Have everybody a tip for me, what can I do?
> >
> > thanks and best regards,
> >
> > Nikolai
> >
> >
> >
> > 2006/7/27, Nikolai Raitsev <[hidden email]>:
> >
> > > Hello
> > >
> > > How works optimistic locking?
> > >
> > > I understand it such (see
> > > http://cwiki.apache.org/CAY/optimistic-locking-explained.html):
> > >
> > > if no data changed in the dataset, is this data record not updated in
> > > the database.
> > >
> > > i have following problem:
> > > first run:
> > > i have 20000 datarecords in a table 1. This dataset I copy with cayenne
> > > into another table 2.
> > > I use setProperty method, like this:
> > >
> > > attrListParameter =
> > > p_dataObjectInt.getObjEntity().getAttributes().toArray();
> > >
> > > int nSizeAttrListParameter = attrListParameter.length;
> > > ObjAttribute attr;
> > > String sAttrName;
> > >
> > > for(int i = 0; i<nSizeAttrListParameter; i++)
> > > {
> > >    attr = (ObjAttribute) attrListParameter[i];
> > >    sAttrName = attr.getName();
> > >    p_dataObject.writeProperty(sAttrName,
> > > p_dataObjectInt.readProperty(sAttrName));
> > > }
> > >
> > > I make commit to the end, commit duratation is 11 sec.
> > >
> > > second run:
> > > i have 20000 datarecords in a table 1 and in table 2.
> > > I copy this 20000 records once again into table 2 (the data is not
> > > changed!) with code from above and commit changes, but commit duratation is
> > > also 11 sec.!!!! No data has changed!, optimistic locking is set in my
> > > XXX.map.xml for class from p_dataObject and for all attributes.
> > >
> > > in the second run is to be sent nevertheless update for all 20000
> > > datarecords, or?
> > >
> > > what i do wrong???
> > >
> > > with thanks, nikolai
> > >
> > >
> > >
> >
>
>
Reply | Threaded
Open this post in threaded view
|

Re: Objects stored in DB despite optimistic locking

Kumarunster
Hello Mike,

Thank you for your answer and for the trouble!
And apologize for my English, is not really my language:)

Thanks once again for the tip...

best regards,

Nikolai


2006/7/27, Mike Kienenberger <[hidden email]>:

>
> Nikolai,
>
> I'm not completely following what you're asking for.
>
> Perhaps you're asking how you can make an empty string into a null
> automatically?  Put this method into a BaseDataObject class (add this
> class between CayenneDataObject and your generated classes).
>
>     public void writeProperty(String propName, Object value)
>     {
>         // Oracle can't handle empty strings, so convert them into
> nulls automatically.
>         // We'll never use an empty string as a database value.
>         if ( (value instanceof String) && (0 == ((String)value).length())
> )
>         {
>             value = null;
>         }
>
>         super.writeProperty(propName, value);
>     }
>
>
>
> On 7/27/06, Nikolai Raitsev <[hidden email]> wrote:
> > Escuse me, that is my and SQL Server problem, not from cayenne...
> >
> > a blank in SQL Server is no blank...
> >
> > best regards,
> >
> > Nikolai
> >
> > ps. but, is it possibility to build the examination that ' '== '' (blank
> > equals not blank) into cayenne?
> >
> > 2006/7/27, Nikolai Raitsev <[hidden email]>:
> > >
> > > I found the problem and probably a bug in cayenne...
> > >
> > > here is a part of my log:
> > >
> > > on first run, insert:
> > >
> > > INFO  QueryLogger: INSERT INTO WPTAB (WPTAB_AENKZ, WPTAB_ISIN,
> > > WPTAB_LOEKZ) VALUES (?, ?, ?)
> > > INFO  QueryLogger: [bind: ' ', 'DE0000044444', ' ']
> > >
> > > Attention, in ' ' is one blank!!!!
> > >
> > > on second run,  update:
> > >
> > > INFO  QueryLogger: UPDATE WPTAB SET WPTAB_AENKZ = ?, WPTAB_LOEKZ = ?
> WHERE
> > > WPTAB_ISIN = ?
> > > INFO  QueryLogger: [bind: ' ', ' ', 'DE0000044444']
> > >
> > > Attention, and here in ' ' is one blank!!!!
> > > The Fields WPTAB_AENKZ and WPTAB_LOEKZ has not changed, why cayenne
> does
> > > those update?
> > >
> > > Have everybody a tip for me, what can I do?
> > >
> > > thanks and best regards,
> > >
> > > Nikolai
> > >
> > >
> > >
> > > 2006/7/27, Nikolai Raitsev <[hidden email]>:
> > >
> > > > Hello
> > > >
> > > > How works optimistic locking?
> > > >
> > > > I understand it such (see
> > > > http://cwiki.apache.org/CAY/optimistic-locking-explained.html):
> > > >
> > > > if no data changed in the dataset, is this data record not updated
> in
> > > > the database.
> > > >
> > > > i have following problem:
> > > > first run:
> > > > i have 20000 datarecords in a table 1. This dataset I copy with
> cayenne
> > > > into another table 2.
> > > > I use setProperty method, like this:
> > > >
> > > > attrListParameter =
> > > > p_dataObjectInt.getObjEntity().getAttributes().toArray();
> > > >
> > > > int nSizeAttrListParameter = attrListParameter.length;
> > > > ObjAttribute attr;
> > > > String sAttrName;
> > > >
> > > > for(int i = 0; i<nSizeAttrListParameter; i++)
> > > > {
> > > >    attr = (ObjAttribute) attrListParameter[i];
> > > >    sAttrName = attr.getName();
> > > >    p_dataObject.writeProperty(sAttrName,
> > > > p_dataObjectInt.readProperty(sAttrName));
> > > > }
> > > >
> > > > I make commit to the end, commit duratation is 11 sec.
> > > >
> > > > second run:
> > > > i have 20000 datarecords in a table 1 and in table 2.
> > > > I copy this 20000 records once again into table 2 (the data is not
> > > > changed!) with code from above and commit changes, but commit
> duratation is
> > > > also 11 sec.!!!! No data has changed!, optimistic locking is set in
> my
> > > > XXX.map.xml for class from p_dataObject and for all attributes.
> > > >
> > > > in the second run is to be sent nevertheless update for all 20000
> > > > datarecords, or?
> > > >
> > > > what i do wrong???
> > > >
> > > > with thanks, nikolai
> > > >
> > > >
> > > >
> > >
> >
> >
>