Jeg tror, at det enten skyldes din døde simple konverter eller måske hvordan Items Entity er defineret (jeg har brugt boolesk for er udelukket og det ser ud til at fungere fint uden konverteren) .
Det bruger min version af Items Entity :-
@Entity(foreignKeys = @ForeignKey(entity = Category.class,parentColumns = "id", childColumns = "category", onDelete = CASCADE))
public class Items {
@PrimaryKey(autoGenerate = true)
private long id;
private String category;
private boolean isexcluded;
public void setCategory(String category) {
this.category = category;
}
public void setId(long id) {
this.id = id;
}
public void setIsexcluded(boolean isexcluded) {
this.isexcluded = isexcluded;
}
public String getCategory() {
return this.category;
}
public long getId() {
return this.id;
}
public boolean isIsexcluded() {
return this.isexcluded;
}
}
sammen med en kategori DAO på :-
@Dao
interface CategoryDAO {
@Query("SELECT * FROM Category")
List<Category> getAllcategories();
@Query("SELECT DISTINCT Category.* " +
"FROM CATEGORY " +
"INNER JOIN ITEMS ON category.id = Items.category " +
"WHERE isexcluded = 0 " +
"ORDER BY lower(category.name)")
List<Category> getSpeacial();
@Query("SELECT DISTINCT Category.* " +
"FROM CATEGORY " +
"INNER JOIN ITEMS ON category.id = Items.category " +
"WHERE isexcluded = 0 " +
"ORDER BY lower(category.name)")
List<CatViewWithItemList> getSpeacial2();
@Insert
public long[] insertCategory(Category... Category);
}
sammen med
new Thread(new Runnable() {
@Override
public void run() {
//mRoomDB.categoryDao().insertCategory(initialCategories());
//mRoomDB.itemsDAO().insertItem(initialItems());
List<Category> categoryList = mRoomDB.categoryDao().getAllcategories();
List<Items> itemsList = mRoomDB.itemsDAO().getAllItems();
for (Category c: categoryList) {
Log.d("CATEGORY","Category is " + c.getName() + " refrence is " + c.getId());
}
for (Items i: itemsList) {
Log.d("ITEM","Item is " + i.getId() + " Category reference is " + i.getCategory() + " Is Excluded is " + Boolean.toString(i.isIsexcluded()));
}
List<Category> categoryList2 = mRoomDB.categoryDao().getSpeacial();
for (Category c: categoryList2) {
Log.d("CATEGORY2","Category is " + c.getName() + " reference is " + c.getId());
}
List<CatViewWithItemList> catViewWithItemLists = mRoomDB.categoryDao().getSpeacial2();
for (CatViewWithItemList cvwil: catViewWithItemLists) {
Log.d("CATVIEWITEM","Category = " + cvwil.myCat.getId() + " ID = " + cvwil.ItemList.get(0).getId() + " IsExcluded = " + Boolean.toString(cvwil.ItemList.get(0).isIsexcluded()));
}
}
}).start();
og med :-
public class CatViewWithItemList {
@Embedded
public Category myCat;
@Relation(parentColumn = "id",
entityColumn = "category")
public List<Items> ItemList;
}
Så er resultatet (del 1 de underliggende data (åh, så jeg kan ikke stave tredje :))):-
2018-12-19 21:47:05.376 2109-2125/? D/CATEGORY: Category is firstname refrence is a
2018-12-19 21:47:05.377 2109-2125/? D/CATEGORY: Category is secondname refrence is b
2018-12-19 21:47:05.377 2109-2125/? D/CATEGORY: Category is thridname refrence is c
2018-12-19 21:47:05.377 2109-2125/? D/ITEM: Item is 1 Category reference is a Is Excluded is false
2018-12-19 21:47:05.377 2109-2125/? D/ITEM: Item is 2 Category reference is c Is Excluded is false
2018-12-19 21:47:05.377 2109-2125/? D/ITEM: Item is 3 Category reference is null Is Excluded is false
2018-12-19 21:47:05.377 2109-2125/? D/ITEM: Item is 4 Category reference is b Is Excluded is false
2018-12-19 21:47:05.377 2109-2125/? D/ITEM: Item is 5 Category reference is b Is Excluded is true
2018-12-19 21:47:05.378 2109-2125/? D/ITEM: Item is 6 Category reference is null Is Excluded is true
og derefter de to sæt resultater :-
2018-12-19 21:47:05.379 2109-2125/? D/CATEGORY2: Category is firstname reference is a
2018-12-19 21:47:05.380 2109-2125/? D/CATEGORY2: Category is secondname reference is b
2018-12-19 21:47:05.380 2109-2125/? D/CATEGORY2: Category is thridname reference is c
2018-12-19 21:47:05.382 2109-2125/? D/CATVIEWITEM: Category = a ID = 1 IsExcluded = false
2018-12-19 21:47:05.382 2109-2125/? D/CATVIEWITEM: Category = b ID = 4 IsExcluded = false
2018-12-19 21:47:05.382 2109-2125/? D/CATVIEWITEM: Category = c ID = 2 IsExcluded = false
Yderligere
Jeg tror, at dit problem ikke er med forespørgslen, men med CatViewItemList i, at du udfylder listen over elementer med alle elementer, der er relateret til kategorien, uanset/efter forespørgslen (også tror jeg, at indlejre listen over elementer i kategorien). Dette forvirrede mig, da du kun virkelig ønsker det specifikke relaterede element (jeg har lige fået fat i 1. i min kode) f.eks. cvwil.ItemList.get(0).isIsexcluded()
og heldet var, at 4 kommer før 5, så den udelukkede vises som falsk.
Jeg mener, at du måske bør nærme dig dette fra varerne, tilslutte dig kategorien f.eks. noget som
SELECT *
FROM Items
JOIN Category ON Items.category = category.id
WHERE Items.isexcluded = 0
ORDER BY category.name ASC;
Jeg er blevet opdateret koden på gitHub for at gøre dette (bemærk, at jeg har ændret kategoritabellen til at have et unikt kolonnenavn categoryid i stedet for id.)
resultaterne er nu (bemærk tilføjet endnu en kategori og 2 flere elementer i omvendt rækkefølge, dvs. først vare (id 7) er udelukket som sand, derefter har id 8 falsk) :-
2018-12-20 21:39:56.971 9136-9160/so53839431.so53839431roomrelationship D/CATEGORY: Category is firstname Category ID is a
2018-12-20 21:39:56.971 9136-9160/so53839431.so53839431roomrelationship D/CATEGORY: Category is secondname Category ID is b
2018-12-20 21:39:56.971 9136-9160/so53839431.so53839431roomrelationship D/CATEGORY: Category is thirdname Category ID is c
2018-12-20 21:39:56.971 9136-9160/so53839431.so53839431roomrelationship D/CATEGORY: Category is fourthname Category ID is d
2018-12-20 21:39:56.971 9136-9160/so53839431.so53839431roomrelationship D/ITEM: Item is 1 Category reference is a Is Excluded is false
2018-12-20 21:39:56.971 9136-9160/so53839431.so53839431roomrelationship D/ITEM: Item is 2 Category reference is c Is Excluded is false
2018-12-20 21:39:56.971 9136-9160/so53839431.so53839431roomrelationship D/ITEM: Item is 3 Category reference is null Is Excluded is false
2018-12-20 21:39:56.971 9136-9160/so53839431.so53839431roomrelationship D/ITEM: Item is 4 Category reference is b Is Excluded is false
2018-12-20 21:39:56.971 9136-9160/so53839431.so53839431roomrelationship D/ITEM: Item is 5 Category reference is b Is Excluded is true
2018-12-20 21:39:56.971 9136-9160/so53839431.so53839431roomrelationship D/ITEM: Item is 6 Category reference is null Is Excluded is true
2018-12-20 21:39:56.971 9136-9160/so53839431.so53839431roomrelationship D/ITEM: Item is 7 Category reference is d Is Excluded is true
2018-12-20 21:39:56.971 9136-9160/so53839431.so53839431roomrelationship D/ITEM: Item is 8 Category reference is d Is Excluded is false
2018-12-20 21:39:56.972 9136-9160/so53839431.so53839431roomrelationship D/ITEMWITHCAT: Item id =1 Category reference is a Is Excluded is false Referenced Category is a Referenced Category name is firstname
2018-12-20 21:39:56.972 9136-9160/so53839431.so53839431roomrelationship D/ITEMWITHCAT: Item id =2 Category reference is c Is Excluded is false Referenced Category is c Referenced Category name is thirdname
2018-12-20 21:39:56.972 9136-9160/so53839431.so53839431roomrelationship D/ITEMWITHCAT: Item id =4 Category reference is b Is Excluded is false Referenced Category is b Referenced Category name is secondname
2018-12-20 21:39:56.972 9136-9160/so53839431.so53839431roomrelationship D/ITEMWITHCAT: Item id =8 Category reference is d Is Excluded is false Referenced Category is d Referenced Category name is fourthname