Как автоматически вставить связанные объекты, используя комнату Android? - PullRequest
0 голосов
/ 18 октября 2018

У меня есть класс Пользователь, у которого есть Список заказов и подобные модели

@Entity
public class User implements Parcelable{
    @PrimaryKey
    @ColumnInfo(name = "_id" )
    int id;
    String email;
    String password;

    List<Order> orders;

    public User(String email, String password) {
       this.email = email;
       this.password = password;
    }
}



@Entity (tableName = "Order",foreignKeys = @ForeignKey(entity = User.class,parentColumns = "_id",childColumns = "user_id", onDelete = ForeignKey.CASCADE),
        indices = {@Index(value = {"user_id"}, unique = true)})
public class Order implements Parcelable{
    @PrimaryKey
    @ColumnInfo(name = "order_id")
    int id;
    @ColumnInfo(name = "user_id")
    int userId;
    String orderName;

    public Order(int id, int userId, String orderName) {
       this.id = id;
       this.userId = userId;
       this.orderName = orderName;
    }
}

Что касается структуры этой модели, что я должен сделать, чтобы создать метод в@Dao вызвал insertUser, который берет пользовательский объект со списком вложенных заказов и сохраняет их вместе, а также при получении данных от пользователя получает их с понравившимися заказами

@Dao
public abstract class DatabaseDao {
    @Insert 
    public abstract void insertUser(User user);
    @Query("SELECT * FROM User WHERE _id =:userId")
    public abstract User getUser(int userId);
  }

Чтобы использовать его следующим образом

public class MainActivity extends AppCompatActivity {

    AppDatabase db;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        db = Room.databaseBuilder(getApplicationContext(),
                AppDatabase.class, "database-name").build();

        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                User user = new User("Fady1", "123");
                user.setId(1);
                Order order1 = new Order(1,1,"Order1");
                Order order2 = new Order(2,1,"Order2");
                Order order3 = new Order(3,1,"Order3");
                List<Order> orders = new ArrayList<>();
                orders.add(order1);
                orders.add(order2);
                orders.add(order3);
                user.setOrders(orders);

                db.databaseDao().insertUser(user);
            }
        });

        thread.start();
    }
}

1 Ответ

0 голосов
/ 18 октября 2018

для реализации этого вам придется использовать TypeConverters.Вы можете искать в Google и понять, как это делается.Вот ссылка на пример приложения на github: Основной класс: https://github.com/medyas/Baking-App/blob/master/app/src/main/java/ml/medyas/bakingapp/Classes/RecipeClass.java

Список класса: https://github.com/medyas/Baking-App/blob/master/app/src/main/java/ml/medyas/bakingapp/Classes/StepsClass.java

Класс конвертера: https://github.com/medyas/Baking-App/blob/master/app/src/main/java/ml/medyas/bakingapp/Classes/StepsConverterClass.java

...