isis-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Dan Haywood <...@haywood-associates.co.uk>
Subject Re: Not able to add 1:m bidirectional relationship
Date Fri, 06 Mar 2015 14:29:11 GMT
I just posted that last mail, and then I figured out what the problem
probably is.

I bet you have an entity that has a collection of clauses, and that the
collection is a List<...>.

In which case the "idx" is added by DN in order that the sequence of those
clause objects can be preserved.

One easy fix (which we do) is to convert to a SortedSet, and have your
RegulationClause implement Comparable.

But let me go check up on the "correct" way to do lists in DN.

HTH
Dan






On 6 March 2015 at 14:27, Dan Haywood <dan@haywood-associates.co.uk> wrote:

> Hi Marianne,
>
> If "Idx" isn't a property that you've explicitly added, then it's probably
> been added through some DN annotation that you have (is my guess).
>
> So, could you show us the DN annotations for the entity that's mapped to
> the failing table ("regulation_clauses").  (Or, the annotations for the
> collection if that's what it actually is).
>
> ~~~
> Also, let's enable some extra logging.
>
> In WEB-INF/logging.properties, switch these two properties to DEBUG:
>
> # DataNucleus
> # the first two log the DML and DDL (if set to DEBUG)
> log4j.logger.DataNucleus.Datastore.Native=DEBUG, Console
> log4j.logger.DataNucleus.Datastore.Schema=DEBUG, Console
>
>
> Also, in persistor.properties, you could enable the log4jdbc-remix driver,
> eg, if using hsqldb then comment out:
>
>
> #isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionDriverName=org.hsqldb.jdbcDriver
>
> #isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionURL=jdbc:hsqldb:mem:test
> #isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionUserName=sa
> #isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionPassword=
>
> and replace with (below):
>
>
> isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionDriverName=net.sf.log4jdbc.DriverSpy
>
> isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionURL=jdbc:log4jdbc:hsqldb:mem:test
> isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionUserName=sa
> isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionPassword=
>
>
> Hopefully in your console you'll be able to search for 'idx' and we'll get
> a clue what it relates to.
>
>
>
> Thx
> Dan
>
>
>
>
>
>
>
>
>
>
>
> On 6 March 2015 at 14:19, Marianne Hagaseth <
> Marianne.Hagaseth@marintek.sintef.no> wrote:
>
>> Thanks for replying so quickly!
>>
>> 'Idx' is not a field added by me, thus, it is created by Isis/DN, I think?
>> Some index-stuff for the database table?
>>
>> Best,
>> Marianne.
>>
>> -----Original Message-----
>> From: Martin Grigorov [mailto:mgrigorov@apache.org]
>> Sent: 6. mars 2015 15:10
>> To: users
>> Subject: Re: Not able to add 1:m bidirectional relationship
>>
>>  java.sql.SQLException: Field 'idx' doesn't have a default value
>>
>> Do you have an entity with field 'idx' in your model ?
>> Or it could be something created by Isis/DN, I don't know.
>>
>> Martin Grigorov
>> Wicket Training and Consulting
>> https://twitter.com/mtgrigorov
>>
>> On Fri, Mar 6, 2015 at 4:06 PM, Marianne Hagaseth <
>> Marianne.Hagaseth@marintek.sintef.no> wrote:
>>
>> > Yes, a lot. See below.
>> > It seems like the values are not picked up, and then the insert into
>> > the database tables fails because the columns are NOT NULL and no
>> > default values exists.
>> >
>> > Some more from the STACK:
>> >
>> > Caused by:
>> > org.datanucleus.store.rdbms.exceptions.MappedDatastoreException:
>> > INSERT INTO regulation_clauses (id_oid,id_eid) VALUES (?,?)
>> >         at
>> >
>> org.datanucleus.store.rdbms.scostore.JoinSetStore.doInternalAdd(JoinSetStore.java:754)
>> >         at
>> >
>> org.datanucleus.store.rdbms.scostore.JoinSetStore.internalAdd(JoinSetStore.java:502)
>> >         at
>> >
>> org.datanucleus.store.rdbms.scostore.JoinSetStore.add(JoinSetStore.java:333)
>> >         ... 71 more
>> > Caused by: java.sql.SQLException: Field 'idx' doesn't have a default
>> > value
>> >
>> > <<<<<<<<<<<<<<<<<<<<<<<<<<<
>> > And more:
>> > <<<<<<<<<<<<<<<<<<<<<<<<<<<
>> >
>> >         ... 73 more
>> > Nested Throwables StackTrace:
>> > org.datanucleus.store.rdbms.exceptions.MappedDatastoreException:
>> > INSERT INTO regulation_clauses (id_oid,id_eid) VALUES (?,?)
>> >         at
>> > org.datanucleus.store.rdbms.scostore.JoinSetStore.doInternalAdd(JoinSe
>> > tStore.java:754)
>> >
>> >         at
>> >
>> org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)
>> >         at
>> > org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.ja
>> > va:582) Caused by: java.sql.SQLException: Field 'idx' doesn't have a
>> > default value
>> >         at
>> > com.mysql.jdbc.SQLError.createSQLException(SQLError.java:996)
>> >
>> >         at
>> >
>> org.datanucleus.store.rdbms.scostore.JoinSetStore.doInternalAdd(JoinSetStore.java:733)
>> >         ... 73 more
>> >
>> > <<<<<<<<<<<<<<<<<<<<<<<<<<<
>> > And more:
>> > <<<<<<<<<<<<<<<<<<<<<<<<<<<
>> >
>> > 14:45:38,105  [Persistence          1661257338@qtp-721005297-3 WARN ]
>> > Execution of method "add" on field "clauses" caused an error : Add
>> > request failed : INSERT INTO regulation_clauses (id_oid,id_eid) VALUES
>> > (?,?) Add request failed : INSERT INTO regulation_clauses
>> > (id_oid,id_eid) VALUES
>> > (?,?)
>> > org.datanucleus.exceptions.NucleusDataStoreException: Add request
>> failed :
>> > INSERT INTO regulation_clauses (id_oid,id_eid) VALUES (?,?)
>> >         at
>> >
>> org.datanucleus.store.rdbms.scostore.JoinSetStore.add(JoinSetStore.java:349)
>> >         at
>> > org.datanucleus.store.types.backed.SortedSet.add(SortedSet.java:716)
>> >
>> > <<<<<<<<<<<<<<<<<<<<<<<<<<<
>> > And more:
>> > <<<<<<<<<<<<<<<<<<<<<<<<<<<
>> >
>> >         at
>> >
>> org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)
>> >         at
>> > org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.ja
>> > va:582)
>> > Caused by:
>> > org.datanucleus.store.rdbms.exceptions.MappedDatastoreException:
>> > INSERT INTO regulation_clauses (id_oid,id_eid) VALUES (?,?)
>> >         at
>> >
>> org.datanucleus.store.rdbms.scostore.JoinSetStore.doInternalAdd(JoinSetStore.java:754)
>> >         at
>> >
>> org.datanucleus.store.rdbms.scostore.JoinSetStore.internalAdd(JoinSetStore.java:502)
>> >         at
>> >
>> org.datanucleus.store.rdbms.scostore.JoinSetStore.add(JoinSetStore.java:333)
>> >         ... 71 more
>> > Caused by: java.sql.SQLException: Field 'idx' doesn't have a default
>> value
>> >         at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:996)
>> >         at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3887)
>> >
>> > <<<<<<<<<<<<<<<<<<<<<<<<<<<
>> > And more:
>> > <<<<<<<<<<<<<<<<<<<<<<<<<<<
>> >
>> >         at
>> >
>> org.datanucleus.store.rdbms.scostore.JoinSetStore.doInternalAdd(JoinSetStore.java:733)
>> >         ... 73 more
>> > Nested Throwables StackTrace:
>> > org.datanucleus.store.rdbms.exceptions.MappedDatastoreException:
>> > INSERT INTO regulation_clauses (id_oid,id_eid) VALUES (?,?)
>> >         at
>> >
>> org.datanucleus.store.rdbms.scostore.JoinSetStore.doInternalAdd(JoinSetStore.java:754)
>> >         at
>> > org.datanucleus.store.rdbms.scostore.JoinSetStore.internalAdd(JoinSetS
>> > tore.java:502)
>> >
>> > <<<<<<<<<<<<<<<<<<<<<<<<<<<
>> > And more:
>> > <<<<<<<<<<<<<<<<<<<<<<<<<<<
>> >
>> >         at
>> >
>> org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)
>> >         at
>> > org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.ja
>> > va:582) Caused by: java.sql.SQLException: Field 'idx' doesn't have a
>> > default value
>> >         at
>> > com.mysql.jdbc.SQLError.createSQLException(SQLError.java:996)
>> >
>> > <<<<<<<<<<<<<<<<<<<<<<<<<<<
>> > And more:
>> > <<<<<<<<<<<<<<<<<<<<<<<<<<<
>> >
>> > Best
>> > -Marianne.
>> >
>> > -----Original Message-----
>> > From: Martin Grigorov [mailto:mgrigorov@apache.org]
>> > Sent: 6. mars 2015 14:53
>> > To: users
>> > Subject: Re: Not able to add 1:m bidirectional relationship
>> >
>> > Hi,
>> >
>> >
>> > On Fri, Mar 6, 2015 at 3:51 PM, Marianne Hagaseth <
>> > Marianne.Hagaseth@marintek.sintef.no> wrote:
>> >
>> > > Hi,
>> > > I am trying to add a 1:m bidirectional relationship, but it fails.
>> > > I wonder if  could be a mismatch between the versions used for some
>> > > of the stuff needed.
>> > > My set up looks like:
>> > >
>> > >
>> > > *        isis-core-webserver 1.7.0
>> > >
>> > > *        datanucleus-api-jdo-3.2.7
>> > >
>> > > *        Eclipse Java EE IDE 4.4.2
>> > >
>> > > *        mysql-connector-java-5.1.34
>> > >
>> > > *        mysql server 5.6.23
>> > >
>> > > *        Jdk 1.7.0_75
>> > >
>> > >
>> > > It fails here at backingStore.add(...):
>> > >
>> > >                 try
>> > >
>> > >                 {
>> > >
>> > >                     backingStore.add(ownerOP,element, (useCache ?
>> > > delegate.size() : -1));
>> > >
>> > >                 }
>> > >
>> > >                 catch (NucleusDataStoreException dse)
>> > >
>> > >                 {
>> > >
>> > >
>> > > NucleusLogger.PERSISTENCE.warn(LOCALISER.msg("023013",
>> > > "add", ownerMmd.getName(), dse));
>> > >
>> > >                     backingSuccess = false;
>> > >
>> > >                 }
>> > > With Error message:
>> > >
>> > > 12:20:54,055  [Datastore            1844639495@qtp-721005297-3 ERROR]
>> > > org.datanucleus.store.rdbms.exceptions.MappedDatastoreException:
>> > > INSERT INTO regulation_clauses (id_oid,id_eid) VALUES (?,?)
>> > >
>> > > 12:20:54,055  [Datastore            1844639495@qtp-721005297-3 ERROR]
>> > > org.datanucleus.store.rdbms.exceptions.MappedDatastoreException:
>> > > INSERT INTO regulation_clauses (id_oid,id_eid) VALUES (?,?)
>> > >
>> > > 12:20:54,055  [Datastore            1844639495@qtp-721005297-3 ERROR]
>> > > Add request failed : INSERT INTO regulation_clauses (id_oid,id_eid)
>> > > VALUES
>> > > (?,?)
>> > >
>> > > 12:20:54,055  [Datastore            1844639495@qtp-721005297-3 ERROR]
>> > > Add request failed : INSERT INTO regulation_clauses (id_oid,id_eid)
>> > > VALUES
>> > > (?,?)
>> > >
>> > > 12:20:54,056  [Persistence          1844639495@qtp-721005297-3 WARN ]
>> > > Execution of method "add" on field "clauses" caused an error : Add
>> > > request failed : INSERT INTO regulation_clauses (id_oid,id_eid)
>> > > VALUES
>> > > (?,?)
>> > >
>> > > Add request failed : INSERT INTO regulation_clauses (id_oid,id_eid)
>> > > VALUES
>> > > (?,?)
>> > >
>> > > org.datanucleus.exceptions.NucleusDataStoreException: Add request
>> > > failed
>> > :
>> > > INSERT INTO regulation_clauses (id_oid,id_eid) VALUES (?,?)
>> > >
>> > >         at
>> > > org.datanucleus.store.rdbms.scostore.JoinSetStore.add(JoinSetStore.j
>> > > av
>> > > a:349)
>> > >
>> > >         at
>> > > org.datanucleus.store.types.backed.SortedSet.add(SortedSet.java:716)
>> > >
>> > >         at dom.regulation.Regulation.addClause(Regulation.java:795)
>> > >
>> > >         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
>> > > Method)
>> > >
>> > >         at
>> > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl
>> > > .j
>> > > ava:57)
>> > >
>> > >         at
>> > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcce
>> > > ss
>> > > orImpl.java:43)
>> > >
>> > >
>> > > etc.etc...
>> > >
>> >
>> > Is there "Caused by: ..." down in the stack ?
>> >
>> >
>> > >
>> > > Best regards,
>> > > Marianne Hagaseth
>> > >
>> > >
>> >
>>
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message