मेरा मानना है कि यह या तो आपके मृत सरल कनवर्टर के कारण है या शायद आइटम इकाई को कैसे परिभाषित किया गया है (मैंने बूलियन का उपयोग किया है के लिए बहिष्कृत और यह कनवर्टर के बिना ठीक काम करता प्रतीत होता है) ।
वह आइटम इकाई के मेरे संस्करण का उपयोग कर रहा है :-
@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;
}
}
श्रेणी डीएओ के साथ :-
@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);
}
साथ में
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();
और साथ :-
public class CatViewWithItemList {
@Embedded
public Category myCat;
@Relation(parentColumn = "id",
entityColumn = "category")
public List<Items> ItemList;
}
फिर परिणाम है (एक भाग अंतर्निहित डेटा (ओह तो मैं तीसरा जादू नहीं कर सकता :))):-
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
और फिर परिणामों के दो सेट :-
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
अतिरिक्त
मेरा मानना है कि आपकी समस्या क्वेरी के साथ नहीं है बल्कि CatViewItemList . के साथ है उसमें आप श्रेणी से संबंधित सभी वस्तुओं के साथ आइटम की सूची भर रहे हैं, भले ही क्वेरी के बाद/के बाद (उर्फ मुझे लगता है, श्रेणी में वस्तुओं की सूची एम्बेड करना)। इसने मुझे भ्रमित कर दिया क्योंकि आप वास्तव में केवल विशिष्ट संबंधित आइटम चाहते हैं (मैंने अभी अपने कोड में पहला स्थान हासिल किया है) उदा। cvwil.ItemList.get(0).isIsexcluded()
और भाग्य यह था कि 4, 5 से पहले आता है, इसलिए यह बहिष्कृत असत्य प्रतीत होता है।
मेरा मानना है कि आपको शायद इस श्रेणी में शामिल होने वाले आइटमों से संपर्क करना चाहिए उदा। कुछ इस तरह
SELECT *
FROM Items
JOIN Category ON Items.category = category.id
WHERE Items.isexcluded = 0
ORDER BY category.name ASC;
मुझे ऐसा करने के लिए gitHub पर कोड अपडेट करना होगा (ध्यान दें कि मैंने श्रेणी तालिका को एक अद्वितीय कॉलम नाम categoryid के लिए बदल दिया है। आईडी के बजाय।)
परिणाम अब हैं (ध्यान दें कि एक और श्रेणी और 2 और आइटम उल्टे क्रम में जोड़े गए हैं यानी पहले आइटम (आईडी 7) को सत्य के रूप में बाहर रखा गया है, फिर आईडी 8 में गलत है) :-
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