Комната - слишком много параметров, возвращаемых из запроса «один ко многим» - PullRequest
0 голосов
/ 03 марта 2020

Я получаю следующую ошибку:

org.linphone.contacts.managementWS.ContactWithNumbers has some fields [id, mName, mSurname,
 mFullName, mCompany, mEmail, mEmailType, mAddress, mPostcode, mCity, mCountry, mAddressType, 
mUrl, mNote, mIsBlocked] 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: mPhoneNumber, mPhoneNumberType. Fields in 
org.linphone.contacts.managementWS.ContactWithNumbers: id, mName, mSurname, mFullName, mCompany, 
mPhoneNumber, mPhoneNumberType, mEmail, mEmailType, mAddress, mPostcode, mCity, mCountry, 
mAddressType, mUrl, mNote, mIsBlocked.

Подавление предупреждения не устраняет ошибку, поэтому я считаю, что я должен использовать @Ignore. Однако где я должен разместить аннотацию @Ignore? Мне все еще нужно использовать столбцы в родительской таблице, но только не в этом конкретном c запросе (который может использовать только 3 из этих столбцов).

РЕДАКТИРОВАТЬ:

ContactsWithNumbers. java:

public class ContactWithNumbers {
    @Embedded public Contact contact;

    @Relation(parentColumn = "id", entityColumn = "mContactId", entity = PhoneNumbers.class)
    public List<PhoneNumbers> numbers;
}

PhoneNumbers. java:

@Entity(tableName = "phone_numbers_table")
public class PhoneNumbers {

    @PrimaryKey(autoGenerate = true)
    public int id;

    @ForeignKey(
            entity = Contact.class,
            parentColumns = "id",
            childColumns = "mContactId",
            onDelete = CASCADE)
    /* String resource ID for the contact */
    @ColumnInfo
    @SerializedName("contact_id")
    public int mContactId;
    /** String resource ID for the phone number */
    @SerializedName("phone_number")
    public String mPhoneNumber;
    /** String resource ID for the phone number type */
    @SerializedName("phone_number_type")
    public String mPhoneNumberType;

    public PhoneNumbers(String phoneNumber, String phoneNumberType) {
        this.mPhoneNumber = phoneNumber;
        this.mPhoneNumberType = phoneNumberType;
    }
}

В моем ContactDao у меня есть следующее:

@Dao
public interface ContactDao {

    ...

    @Transaction
    @Query("SELECT * FROM phone_numbers_table")
    List<ContactWithNumbers> getContactsWithPhoneNumbers();

...
}
...