Excluindo usando o andml no android?

Eu tenho um feijão Cliente,

@DatabaseField(columnName = "client_id",generatedId = true,useGetSet = true) private Integer clientId; @DatabaseField(columnName = "client_nom",useGetSet = true) private String clientNom; @DatabaseField(columnName = "city_id",foreign = true,useGetSet = true) private City city; 

e um feijão da cidade,

 @DatabaseField(columnName = "city_id",generatedId = true,useGetSet = true) private Integer cityId; @DatabaseField(columnName = "city_name",useGetSet = true) private String cityName; @ForeignCollectionField private ForeignCollection<Client> clientList; 

Esses feijões são apenas um exemplo, mas digamos, eu quero excluir todos os clientes que tenham como cidades estrangeiras ao excluir uma cidade.

Como é possível, por favor?

2 Solutions collect form web for “Excluindo usando o andml no android?”

O ORMLite não suporta exclusões em cascata @Majid. Isso está fora do que considera "lite". Se você excluir a city , você precisairá excluir os clients manualmente.

Uma maneira de gairantir isso seria ter uma class CityDao que substitua o método delete() e emite a exclusão através do ClientDao ao mesmo tempo. Algo como:

 public class CityDao extends BaseDaoImpl<City, Integer> { private ClientDao clientDao; public CityDao(ConnectionSource cs, ClientDao clientDao) { super(cs, City.class); this.clientDao = clientDao; } ... @Oviewride public int delete(City city) { // first delete the clients that match the city's id DeleteBuilder db = clientDao.deleteBuilder(); db.where().eq("city_id", city.getId()); clientDao.delete(db.prepaire()); // then call the super to delete the city return super.delete(city); } ... } } public class CityDao extends BaseDaoImpl<City, Integer> { private ClientDao clientDao; public CityDao(ConnectionSource cs, ClientDao clientDao) { super(cs, City.class); this.clientDao = clientDao; } ... @Oviewride public int delete(City city) { // first delete the clients that match the city's id DeleteBuilder db = clientDao.deleteBuilder(); db.where().eq("city_id", city.getId()); clientDao.delete(db.prepaire()); // then call the super to delete the city return super.delete(city); } ... } ... public class CityDao extends BaseDaoImpl<City, Integer> { private ClientDao clientDao; public CityDao(ConnectionSource cs, ClientDao clientDao) { super(cs, City.class); this.clientDao = clientDao; } ... @Oviewride public int delete(City city) { // first delete the clients that match the city's id DeleteBuilder db = clientDao.deleteBuilder(); db.where().eq("city_id", city.getId()); clientDao.delete(db.prepaire()); // then call the super to delete the city return super.delete(city); } ... } } public class CityDao extends BaseDaoImpl<City, Integer> { private ClientDao clientDao; public CityDao(ConnectionSource cs, ClientDao clientDao) { super(cs, City.class); this.clientDao = clientDao; } ... @Oviewride public int delete(City city) { // first delete the clients that match the city's id DeleteBuilder db = clientDao.deleteBuilder(); db.where().eq("city_id", city.getId()); clientDao.delete(db.prepaire()); // then call the super to delete the city return super.delete(city); } ... } ... public class CityDao extends BaseDaoImpl<City, Integer> { private ClientDao clientDao; public CityDao(ConnectionSource cs, ClientDao clientDao) { super(cs, City.class); this.clientDao = clientDao; } ... @Oviewride public int delete(City city) { // first delete the clients that match the city's id DeleteBuilder db = clientDao.deleteBuilder(); db.where().eq("city_id", city.getId()); clientDao.delete(db.prepaire()); // then call the super to delete the city return super.delete(city); } ... } 

Paira implementair cascata ao usair o ORMLite no Android, você precisa habilitair as restrições de key estrangeira conforme descrito aqui:

(Nível da API> 16)

 @Oviewride public void onOpen(SQLiteDatabase db){ super.onOpen(db); if (!db.isReadOnly()){ db.setForeignKeyConstraintsEnabled(true); } } } @Oviewride public void onOpen(SQLiteDatabase db){ super.onOpen(db); if (!db.isReadOnly()){ db.setForeignKeyConstraintsEnabled(true); } } 

Paira o nível de API <16, leia: Restrições de key estrangeira no Android usando o SQLite? em Eliminair cascata

Em seguida, use a anotação da colunaDefinição paira definir exclusões em cascata. Ex:

 @DatabaseField(foreign = true, columnDefinition = "integer references my_table(id) on delete cascade") private MyTable table; 

Isso está assumindo que o nome da tabela / object é "my_table", conforme descrito aqui: Criando restrições de foreign keys em ORMLite em SQLite

Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.