android


ClassCastException when primarykey is short in greendao


I created an entity which need to identity by Short only.
Here is my generated code:
public Source(Short id, String name) {
this.id = id;
this.name = name;
}
TestCode DatabaseHelperTest.java:
public void testInsertAndLoad(){
Source source = new Source((short) 0, "TestSource");
SourceDao sourceDao = daoSession.getSourceDao(); //#line 26
sourceDao.insert(source);
Short id = source.getId();
assertNotNull(id);
}
When I run test, I got the ClassCastException:
Running tests
Test running started
java.lang.ClassCastException: java.lang.Short cannot be cast to java.lang.Long
at de.greenrobot.dao.identityscope.IdentityScopeLong.put(IdentityScopeLong.java:31)
at de.greenrobot.dao.AbstractDao.attachEntity(AbstractDao.java:695)
at de.greenrobot.dao.AbstractDao.updateKeyAfterInsertAndAttach(AbstractDao.java:362)
at de.greenrobot.dao.AbstractDao.executeInsert(AbstractDao.java:355)
at de.greenrobot.dao.AbstractDao.insert(AbstractDao.java:293)
at com.tuanchau.DatabaseHelperTest.testInsertAndLoad(DatabaseHelperTest.java:26)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1584)
So, does GreenDAO allow to make short become primary key?
And, how can I deal with this exception.
Thanks
Update:
DB Generation code
Entity source = schema.addEntity("Source");
Entity category = schema.addEntity("Category");
source.addShortProperty("id").primaryKey().getProperty();
source.addStringProperty("name").notNull();
category.addIntegerProperty("id").primaryKey().getProperty();
category.addStringProperty("name").notNull();
Property csid = category.addLongProperty("sid").notNull().getProperty();
category.addToOne(source, csid);
Source Properties
public static class Properties {
public final static Property Id = new Property(0, Short.class, "id", true, "ID");
public final static Property Name = new Property(1, String.class, "name", false, "NAME");
};
Category Properties
public static class Properties {
public final static Property Id = new Property(0, Integer.class, "id", true, "ID");
public final static Property Name = new Property(1, String.class, "name", false, "NAME");
public final static Property Sid = new Property(2, short.class, "sid", false, "SID");
};
From greenDao website:
Current primary key (PK) restrictions: Currently, entities must have a long or Long property as their primary key. This is recommended practice for Android and SQLite. greenDAO is prepared to handle any primary key scenario in the future, but not everything is implemented completely yet. To work around this issue, you can use a long primary key and use an unique index for the intended “key” properties.
You could try using something like this:
source.addIdProperty();
source.addShortProperty("shortId").unique().getProperty();
source.addStringProperty("name").notNull();

Related Links

React Native: Update view (ListView) on navigator pop
trying to build android app using ionic
Android: Height of table cell should get height of previous cell
how to update RecyclerView element from OnActivityResult
Cannot set typeface to tab of TabLayout bind with ViewPager in Android
How to push project from android studio into specific github folder in existing repository?
Passing ArrayList from AsyncTask to PagerAdapter
How to check if my custom keyboard has been enabled in settings
Google map is showing up blank, app throws “Could not find method” exceptions
Email composer plugin phonegap android
android basic auth okhttpclient
Send data to server and server execute the query but no response in android device becasue of no internet connection
How to show SearchView Outside/Below toolbar
When i click a list item i want to store it name in an edittext
Prevent WebView fragment from reloading page on screen rotation
Layout dynamic grid in middle

Categories

HOME
cobalt
gdb
c99
forms
phpmyadmin
mysql-workbench
yahoo-finance
nuget
carousel
alsa
permissions
telegram-bot
babeljs
jetty
opengl-3
discrete-mathematics
pega
redis-sentinel
openbugs
stellar.js
do-while
modbus-tcp
windows-xp
drive
strongname
mount
ckfinder
dapper-extensions
android-sharedpreferences
flooding
delimiter
apktool
volatile
jett
hreflang
hibernate-search
html-encode
watchman
android-augmented-reality
demo
trigonometry
skylink
linqpad
oracle-service-bus
berkeley-db-je
httr
servermanager
twilio-click-to-call
openblas
remedy
singleinstance
amq
ngmaterial
py2neo
google-photos
cvxpy
node-request
grails-plugin
redistributable
segment-io
rspec2
x-tag
synonym
cifilter
refinerycms
createprocess
halcon
realsense
concept-insights
highland.js
maybe
opl
computer-architecture
ess
typeconverter
osc
document-repository
nodelist
android-cookiemanager
iso-prolog
parallel-testing
draw2d-js
radiant
renderer
decoupling
scrypt
poker
abstract-data-type
insert-id
chart-director
preload
monotouch.dialog
iboutlet
fitbounds
wiimote
urlrewriter
timthumb
web-application-project
tui
sqlobject

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App