Дублированный класс найден в файле, привязка данных, комната DB - PullRequest
0 голосов
/ 12 апреля 2019

Я столкнулся с очень досадной ошибкой.Я реализую комнату БД.Когда я пишу запрос вставки для другой таблицы в DAO, класс android studio генерирует ошибку компиляции, связанную с привязкой данных android, вот мой класс DAO

@Dao
public interface MyCustomDAO {

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertShop(ShopModel shop);

    //whenever i write this insert query, my android studio generate the stated error
   // and when i remove it project buil successfully

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertAbout(AboutEntity about);

    @Query("Select * From shops")
    LiveData<List<ShopModel>> getShopsData();

}

, вот мой класс About Entity

@Entity(
    tableName = "about",
    foreignKeys = {@ForeignKey(entity = ShopModel.class,parentColumns = "shop_id",childColumns = "id")}
    )
// i have implemented the shopModel class with a col namely, shop_id
public class AboutEntity {

@NonNull
@ColumnInfo(name = "id")
private String shopId;
@ColumnInfo
private String monToFriTiming;
@ColumnInfo
private String satTiming;
@ColumnInfo
private String sunTiming;
@ColumnInfo
private String description;

public AboutEntity(@NonNull String shopId, String monToFriTiming, String satTiming, String sunTiming, String description) {
    this.shopId = shopId;
    this.monToFriTiming = monToFriTiming;
    this.satTiming = satTiming;
    this.sunTiming = sunTiming;
    this.description = description;
}

@NonNull
public String getShopId() {
    return shopId;
}
// other fields getter Methods

}

Вот класс ShopModel

@Entity
public class ShopModel {
@NonNull
@PrimaryKey
@ColumnInfo(name = "shop_id")
private String id;

 // some other fields and their implementation in the constructor and getter methods for them

public ShopModel(@NonNull String id) {
    this.id = id;
}

@NonNull
public String getId() {
    return id;
}

} журнал неудачной сборки

1 Ответ

0 голосов
/ 12 апреля 2019

Трудно сказать, не видя реальных ошибок, которые вы получаете, но я предполагаю, что ваша проблема связана с несколькими методами вставки для разных сущностей в одном и том же DAO.

Вместо того, чтобы делать это:

@Dao
public interface WrongDAO {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertShop(ShopModel shop);

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertAbout(AboutEntity about);

    @Query("Select * From shops")
    LiveData<List<ShopModel>> getShopsData();
}

В общем, вы всегда должны создавать разные DAO для каждой сущности , чтобы ваш код был более организованным:

@Dao
public interface ShopDAO {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertShop(ShopModel shop);

    @Query("Select * From shops")
    LiveData<List<ShopModel>> getShopsData();
}
@Dao
public interface AboutDAO {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertAbout(AboutEntity about);
}

Я не являюськонечно, обязательно ли это в Room, но пока все примеры, которые я видел, имеют один DAO для каждой сущности, поэтому я, вероятно, буду придерживаться этого.

Из официальной документации :

Рекомендуется иметь несколько классов Dao в вашей кодовой базе в зависимости от таблиц, к которым они прикасаются.

Чтобы это работало правильно, не забудьте включить все ваши DAO в декларацию вашегоБаза данных номеров!

...