要实现Android Room中一对多关系的级联删除,可以按照以下步骤进行操作:
@Entity
public class User {
@PrimaryKey
public int id;
public String name;
}
@Entity
public class Book {
@PrimaryKey
public int id;
public String title;
public int userId; // 外键,指向User表的id字段
}
@Dao
public interface UserDao {
@Query("SELECT * FROM user")
List getAllUsers();
@Query("SELECT * FROM user WHERE id = :userId")
User getUserById(int userId);
@Insert
void insertUser(User user);
@Delete
void deleteUser(User user);
}
@Dao
public interface BookDao {
@Query("SELECT * FROM book WHERE userId = :userId")
List getBooksByUserId(int userId);
@Query("SELECT * FROM book WHERE id = :bookId")
Book getBookById(int bookId);
@Insert
void insertBook(Book book);
@Delete
void deleteBook(Book book);
@Query("DELETE FROM book WHERE userId = :userId")
void deleteBooksByUserId(int userId);
}
@Database(entities = {User.class, Book.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract UserDao userDao();
public abstract BookDao bookDao();
}
public class MainActivity extends AppCompatActivity {
private AppDatabase database;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化数据库
database = Room.databaseBuilder(getApplicationContext(),
AppDatabase.class, "my-database").build();
// 插入一个用户和一本书,并关联起来
User user = new User();
user.id = 1;
user.name = "John";
database.userDao().insertUser(user);
Book book = new Book();
book.id = 1;
book.title = "Android Programming";
book.userId = user.id;
database.bookDao().insertBook(book);
// 删除用户时,级联删除关联的书籍
database.userDao().deleteUser(user);
// 检查是否级联删除成功
List books = database.bookDao().getBooksByUserId(user.id);
Log.d("MainActivity", "Number of books: " + books.size());
}
}
以上代码示例中,当删除一个用户时,会自动级联删除关联的书籍。在BookDao中的deleteBooksByUserId()
方法会删除所有属于该用户的书籍。