Fixed
Status Update
Comments
da...@google.com <da...@google.com> #2
Thank you for reporting this issue and providing a sample app. This is definitely a bug in the compiler, I'll work on a fix soon.
ap...@google.com <ap...@google.com> #3
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 2486fa234325be141fd48460835e42f630295a63
Author: Daniel Santiago Rivera <danysantiago@google.com>
Date: Thu Jul 25 13:33:47 2019
Ignore binding errors for ignored columns via @Entity
When processing POJO fields don't log a processor error due to missing
bindings for a field with a column name that is ignored via the
ignoredColumns property of @Entity.
Bug: 138238182
Test: PojoProcessorTest & testapp
Change-Id: If7e283310e236d67bea62fd47d45a93015a29fc8
M room/compiler/src/main/kotlin/androidx/room/processor/FieldProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/FtsTableEntityProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/PojoProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/TableEntityProcessor.kt
M room/compiler/src/test/kotlin/androidx/room/processor/FieldProcessorTest.kt
M room/compiler/src/test/kotlin/androidx/room/processor/PojoProcessorTest.kt
M room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/TestDatabase.java
A room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/dao/LibraryItemDao.java
A room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/vo/LibraryPojo.java
A room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/vo/RoomLibraryPojo.java
https://android-review.googlesource.com/1091024
https://goto.google.com/android-sha1/2486fa234325be141fd48460835e42f630295a63
Branch: androidx-master-dev
commit 2486fa234325be141fd48460835e42f630295a63
Author: Daniel Santiago Rivera <danysantiago@google.com>
Date: Thu Jul 25 13:33:47 2019
Ignore binding errors for ignored columns via @Entity
When processing POJO fields don't log a processor error due to missing
bindings for a field with a column name that is ignored via the
ignoredColumns property of @Entity.
Bug: 138238182
Test: PojoProcessorTest & testapp
Change-Id: If7e283310e236d67bea62fd47d45a93015a29fc8
M room/compiler/src/main/kotlin/androidx/room/processor/FieldProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/FtsTableEntityProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/PojoProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/TableEntityProcessor.kt
M room/compiler/src/test/kotlin/androidx/room/processor/FieldProcessorTest.kt
M room/compiler/src/test/kotlin/androidx/room/processor/PojoProcessorTest.kt
M room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/TestDatabase.java
A room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/dao/LibraryItemDao.java
A room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/vo/LibraryPojo.java
A room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/vo/RoomLibraryPojo.java
Description
Version used: 2.2.0-alpha01
Devices/Android versions reproduced on: Emulator x86_64 API level 27
I have been provided JAR with a POJO from a third party. The POJO is used extensively by the library code and it has package name such as "com.library.LibraryItem". I want to use this POJO with Room as an entity so I can save instances to a local DB.
I cannot annotate their library POJO, it is a JAR supplied to us that may change on a semi-regular basis.
I tried creating a subclass and using ignoredColumns but I still get errors because Room complains it cannot convert some of the fields I said to ignored. I created a TypeConverter to make the errors from Room go away but there are still more errors referring to the columns I am ignoring.
Here is my subclass:
/**
* I really want to save instances of LibraryItem in my database!
*/
@Entity(tableName = "items", ignoredColumns = "obj")
public class RoomItem extends LibraryItem {
// I have to put these fields here even though they aren't used to store any
// data just to make Room happy!
@PrimaryKey
@NonNull
private String id;
private String name;
private Long price;
public RoomItem(String id, String name, Long price) {
setId(id);
setName(name);
setPrice(price);
}
}
See the attached sample app that demonstrates the trouble. The output currently is:
> Task :app:compileDebugJavaWithJavac FAILED
/home/jacob/work/source/jwapp/app/src/main/java/com/library/LibraryItem.java:13: error: Cannot find getter for field.
private final JSONObject obj = new JSONObject();
^
/home/jacob/work/source/jwapp/app/src/main/java/com/jwapp/ItemDao.java:14: warning: com.jwapp.RoomItem has some fields [obj] which are not returned by the query. If they are not supposed to be read from the result, you can mark them with @Ignore annotation. You can suppress this warning by annotating the method with @SuppressWarnings(RoomWarnings.CURSOR_MISMATCH). Columns returned by the query: id, name, price. Fields in com.jwapp.RoomItem: id, name, price, obj.
List<RoomItem> getAll();
^
/home/jacob/work/source/jwapp/app/src/main/java/com/jwapp/ItemDao.java:17: warning: com.jwapp.RoomItem has some fields [obj] which are not returned by the query. If they are not supposed to be read from the result, you can mark them with @Ignore annotation. You can suppress this warning by annotating the method with @SuppressWarnings(RoomWarnings.CURSOR_MISMATCH). Columns returned by the query: id, name, price. Fields in com.jwapp.RoomItem: id, name, price, obj.
List<RoomItem> loadAllByIds(int[] ids);
^
/home/jacob/work/source/jwapp/app/src/main/java/com/jwapp/ItemDao.java:20: warning: com.jwapp.RoomItem has some fields [obj] which are not returned by the query. If they are not supposed to be read from the result, you can mark them with @Ignore annotation. You can suppress this warning by annotating the method with @SuppressWarnings(RoomWarnings.CURSOR_MISMATCH). Columns returned by the query: id, name, price. Fields in com.jwapp.RoomItem: id, name, price, obj.
RoomItem findByName(String name);
^
1 error
3 warnings