db-jdo-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Muhammad Gelbana <m.gelb...@gmail.com>
Subject Re: How to annotate a column to represent "int unsigned" datatype ?
Date Mon, 02 Jul 2012 16:59:00 GMT
Andy from datanucleus started replying to my thread and posted some useful
information already.
http://www.datanucleus.org/servlet/forum/viewthread_thread,7196_lastpage,yes#35848



On Mon, Jul 2, 2012 at 12:32 AM, Muhammad Gelbana <m.gelbana@gmail.com>wrote:

> I found datanucleus mapping long to BIGINT(20) btw.
>
>
> On Mon, Jul 2, 2012 at 12:21 AM, Muhammad Gelbana <m.gelbana@gmail.com>wrote:
>
>> SQL type INT(11) UNSIGNED declared for field of java type java.lang.Long
>> cant be mapped for this datastore.
>> :)
>>
>> This is killing me ! ehehehhe
>>
>>
>> On Sun, Jul 1, 2012 at 11:22 PM, Michael Bouschen <
>> michael.bouschen@akquinet.de> wrote:
>>
>>> Hi,
>>>
>>> I'm wondering why the error message says "the SQL type INT(11) UNSIGNED
>>> declared for field of java type java.lang.Integer". So maybe the error is
>>> not on the annotations for class Test, but for the referred class Member.
>>> What is the primary key for class member? You cannot use an Integer or int,
>>> because INT(11) may hold values that cause an overflow. So the primary key
>>> field in Member should be a long field.
>>>
>>> Regards Michael
>>>
>>>  First of all, thank you both for your time :)
>>>>
>>>> Michael, I'm very sorry it didn't work. I can't figure out the
>>>> difference
>>>> between sqlType and jdbcType !
>>>>
>>>> I tried your suggestions with different flavors such as (INTEGER(11)
>>>> UNSIGNED and switched cases) but none worked.
>>>>
>>>> @Column(sqlType = "INT(11) UNSIGNED", defaultValue = "1")
>>>> private Member member;
>>>>
>>>>
>>>> But all attempts brought up that exception (Or what reflects the sqlType
>>>> value), I alos tried these combinations with jdbcType but didn't too:
>>>> *(TclRequest2 is the class with the mapping I'm trying to test and the
>>>> main
>>>> method initializing the test)*
>>>>
>>>>
>>>> javax.jdo.**JDOFatalInternalException: SQL type INT(11) UNSIGNED
>>>> declared for
>>>> field of java type java.lang.Integer cant be mapped for this datastore.
>>>> at
>>>> org.datanucleus.api.jdo.**NucleusJDOHelper.**
>>>> getJDOExceptionForNucleusExcep**tion(NucleusJDOHelper.java:**562)
>>>> at
>>>> org.datanucleus.api.jdo.**JDOPersistenceManager.**jdoMakePersistent(**
>>>> JDOPersistenceManager.java:**745)
>>>> at
>>>> org.datanucleus.api.jdo.**JDOPersistenceManager.**makePersistent(**
>>>> JDOPersistenceManager.java:**765)
>>>> at
>>>> com.skycomm.services.dao.impl.**GenericDAOImpl.saveAndDetach(**
>>>> GenericDAOImpl.java:267)
>>>> at com.skycomm.ixload.**TclRequest2.main(TclRequest2.**java:58)
>>>> NestedThrowablesStackTrace:
>>>> SQL type INT(11) UNSIGNED declared for field of java type
>>>> java.lang.Integer
>>>> cant be mapped for this datastore.
>>>> org.datanucleus.exceptions.**NucleusException: SQL type INT(11)
>>>> UNSIGNED
>>>> declared for field of java type java.lang.Integer cant be mapped for
>>>> this
>>>> datastore.
>>>> at
>>>> org.datanucleus.store.rdbms.**mapping.RDBMSMappingManager.**
>>>> getDatastoreMappingClass(**RDBMSMappingManager.java:305)
>>>> at
>>>> org.datanucleus.store.rdbms.**mapping.RDBMSMappingManager.**
>>>> createDatastoreMapping(**RDBMSMappingManager.java:564)
>>>> at
>>>> org.datanucleus.store.mapped.**mapping.PersistableMapping.**
>>>> prepareDatastoreMapping(**PersistableMapping.java:246)
>>>> at
>>>> org.datanucleus.store.mapped.**mapping.PersistableMapping.**
>>>> initialize(PersistableMapping.**java:113)
>>>> at
>>>> org.datanucleus.store.mapped.**mapping.MappingFactory.**
>>>> createMapping(MappingFactory.**java:97)
>>>> at
>>>> org.datanucleus.store.mapped.**mapping.**AbstractMappingManager.**
>>>> getMapping(**AbstractMappingManager.java:**255)
>>>> at
>>>> org.datanucleus.store.rdbms.**table.ClassTable.**
>>>> manageMembers(ClassTable.java:**540)
>>>> at
>>>> org.datanucleus.store.rdbms.**table.ClassTable.manageClass(**
>>>> ClassTable.java:420)
>>>> at
>>>> org.datanucleus.store.rdbms.**table.ClassTable.**
>>>> initializeForClass(ClassTable.**java:1080)
>>>> at
>>>> org.datanucleus.store.rdbms.**table.ClassTable.initialize(**
>>>> ClassTable.java:267)
>>>> at
>>>> org.datanucleus.store.rdbms.**RDBMSStoreManager$ClassAdder.**
>>>> initializeClassTables(**RDBMSStoreManager.java:2452)
>>>> at
>>>> org.datanucleus.store.rdbms.**RDBMSStoreManager$ClassAdder.**
>>>> addClassTablesAndValidate(**RDBMSStoreManager.java:2359)
>>>> at
>>>> org.datanucleus.store.rdbms.**RDBMSStoreManager$ClassAdder.**
>>>> run(RDBMSStoreManager.java:**2009)
>>>> at
>>>> org.datanucleus.store.rdbms.**AbstractSchemaTransaction.**execute(**
>>>> AbstractSchemaTransaction.**java:113)
>>>> at
>>>> org.datanucleus.store.rdbms.**RDBMSStoreManager.addClasses(**
>>>> RDBMSStoreManager.java:820)
>>>> at
>>>> org.datanucleus.store.**AbstractStoreManager.addClass(**
>>>> AbstractStoreManager.java:**1163)
>>>> at
>>>> org.datanucleus.store.mapped.**MappedStoreManager.**getDatastoreClass(*
>>>> *MappedStoreManager.java:383)
>>>> at
>>>> org.datanucleus.store.rdbms.**fieldmanager.**DynamicSchemaFieldManager.
>>>> **storeObjectField(**DynamicSchemaFieldManager.**java:98)
>>>> at
>>>> org.datanucleus.state.**AbstractStateManager.**providedObjectField(**
>>>> AbstractStateManager.java:**1452)
>>>> at com.skycomm.ixload.**TclRequest2.jdoProvideField(**TclRequest2.java)
>>>> at com.skycomm.ixload.**TclRequest2.jdoProvideFields(**
>>>> TclRequest2.java)
>>>> at
>>>> org.datanucleus.state.**AbstractStateManager.**provideFields(**
>>>> AbstractStateManager.java:**1520)
>>>> at
>>>> org.datanucleus.store.rdbms.**RDBMSPersistenceHandler.**
>>>> checkForSchemaUpdatesForFields**OfObject(**
>>>> RDBMSPersistenceHandler.java:**634)
>>>> at
>>>> org.datanucleus.store.rdbms.**RDBMSPersistenceHandler.**insertObject(**
>>>> RDBMSPersistenceHandler.java:**119)
>>>> at
>>>> org.datanucleus.state.**JDOStateManager.**internalMakePersistent(**
>>>> JDOStateManager.java:2371)
>>>> at
>>>> org.datanucleus.state.**JDOStateManager.**makePersistent(**
>>>> JDOStateManager.java:2347)
>>>> at
>>>> org.datanucleus.**ObjectManagerImpl.**persistObjectInternal(**
>>>> ObjectManagerImpl.java:1798)
>>>> at
>>>> org.datanucleus.**ObjectManagerImpl.**persistObjectWork(**
>>>> ObjectManagerImpl.java:1647)
>>>> at
>>>> org.datanucleus.**ObjectManagerImpl.**persistObject(**
>>>> ObjectManagerImpl.java:1504)
>>>> at
>>>> org.datanucleus.api.jdo.**JDOPersistenceManager.**jdoMakePersistent(**
>>>> JDOPersistenceManager.java:**740)
>>>> at
>>>> org.datanucleus.api.jdo.**JDOPersistenceManager.**makePersistent(**
>>>> JDOPersistenceManager.java:**765)
>>>> at
>>>> com.skycomm.services.dao.impl.**GenericDAOImpl.saveAndDetach(**
>>>> GenericDAOImpl.java:267)
>>>> at com.skycomm.ixload.**TclRequest2.main(TclRequest2.**java:58)
>>>> Exception in thread "main" java.lang.NullPointerException
>>>> at com.skycomm.ixload.**TclRequest2.main(TclRequest2.**java:58)
>>>>
>>>>
>>>> Thanks a lot :)
>>>>
>>>> On Sun, Jul 1, 2012 at 2:04 PM, Michael Bouschen <
>>>> michael.bouschen@akquinet.de> wrote:
>>>>
>>>>  Hi,
>>>>>
>>>>> I'm not sure whether I understand he issue correctly. What I
>>>>> understood is
>>>>> that you want Datanucleus to create the table for your class Test. But
>>>>> the
>>>>> generated table does not have the correct column type for the foreign
>>>>> key,
>>>>> since it is not unsigned.
>>>>>
>>>>> The @Column annotation has an attribute called sqlType that allows you
>>>>> to
>>>>> declare the type of the column in the database (in your case "INT(11)
>>>>> UNSIGNED"). I'm note sure whether you can have both jdbcType and
>>>>> sqlType. I
>>>>> would skip the jdbcType and length when specifying sqlType.
>>>>>
>>>>> Hope this helps.
>>>>>
>>>>> Regards Michael
>>>>>
>>>>>
>>>>>   Hi everyone,
>>>>>
>>>>>> Here is a sample of my mapping:[code]@****PersistenceCapable(****
>>>>>> identityType
>>>>>>
>>>>>> =
>>>>>> IdentityType.APPLICATION, detachable = "true")
>>>>>> public class Test {
>>>>>>       @PrimaryKey
>>>>>>       @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
>>>>>>       private long id;
>>>>>>       @Persistent(column = "user")
>>>>>>       @Column(defaultValue = "1", jdbcType = "INTEGER", length =
>>>>>> 11,allowsNull = "false")
>>>>>>       private Member member;
>>>>>>
>>>>>>       //Getters and setters
>>>>>> }[/code]I'm using MySQL.
>>>>>> I have my object (Test) with a field that maps another object (Member)
>>>>>> that
>>>>>> I'm not allowed to alter it's table. Member's id column type "INT(11)
>>>>>> UNSIGNED"
>>>>>>
>>>>>> Datanucleus (A JDO implementation) is unable to create the "Test"
>>>>>> table
>>>>>> because it's "user" column will have to have a foreign-key constraint
>>>>>> to
>>>>>> point at "Member"'s PK column which is "INT(11)  UNSIGNED". I managed
>>>>>> to
>>>>>> specify it's type and length but I can't specify that it's
>>>>>> [b]UNSIGNED[/b] !
>>>>>>
>>>>>> I suppose this can be done using extensions but I can't find a clear
>>>>>> and
>>>>>> detailed specification for the available extensions.
>>>>>>
>>>>>> I reached that page, looked through some of the api docs but found
>>>>>> nothing.
>>>>>>
>>>>>> I generally find the extensions annotation very critical sometimes
>>>>>> but I
>>>>>> can't find where is it's specification ?!
>>>>>>
>>>>>> I feel terribly lost right now !
>>>>>>
>>>>>>
>>>>>>  --
>>>>> *Michael Bouschen*
>>>>> *Prokurist*
>>>>>
>>>>> akquinet tech@spree GmbH
>>>>> Bülowstr. 66, D-10783 Berlin
>>>>>
>>>>> Fon:   +49 30 235 520-33
>>>>> Fax:   +49 30 217 520-12
>>>>> Email: michael.bouschen@akquinet.de
>>>>> Web: www.akquinet.de <http://www.akquinet.de>
>>>>>
>>>>> akquinet tech@spree GmbH, Berlin
>>>>> Geschäftsführung: Martin Weber, Dr. Torsten Fink
>>>>> Amtsgericht Berlin-Charlottenburg HRB 86780 B
>>>>> USt.-Id. Nr.: DE 225 964 680
>>>>>
>>>>>
>>>>
>>>>
>>>
>>> --
>>> *Michael Bouschen*
>>> *Prokurist*
>>>
>>> akquinet tech@spree GmbH
>>> Bülowstr. 66, D-10783 Berlin
>>>
>>> Fon:   +49 30 235 520-33
>>> Fax:   +49 30 217 520-12
>>> Email: michael.bouschen@akquinet.de
>>> Web: www.akquinet.de <http://www.akquinet.de>
>>>
>>> akquinet tech@spree GmbH, Berlin
>>> Geschäftsführung: Martin Weber, Dr. Torsten Fink
>>> Amtsgericht Berlin-Charlottenburg HRB 86780 B
>>> USt.-Id. Nr.: DE 225 964 680
>>>
>>
>>
>>
>> --
>> *Regards,*
>> *Muhammad Gelbana
>> Java Developer*
>>
>>
>
>
> --
> *Regards,*
> *Muhammad Gelbana
> Java Developer*
>
>


-- 
*Regards,*
*Muhammad Gelbana
Java Developer*

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