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 Sun, 01 Jul 2012 22:32:58 GMT
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*

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