2015-12-17 2 views
2

Я прочитал пару вопросов на StackOverflow об этом, но они не помогаютOrmLite Cascade Delete

Как удалить ProductPhoto сек при удалении определенного Products?

@DatabaseTable(tableName = "Products") 
public class Product{ 

    @DatabaseField(generatedId = true) 
    private Long id; 

    @ForeignCollectionField(eager = false) 
    ForeignCollection<ProductPhoto> productPhotos; 
} 

@DatabaseTable(tableName = "ProductPhotos") 
public class ProductPhoto { 

    @DatabaseField(generatedId = true) 
    private Long id; 

    @DatabaseField(foreign = true) 
    Product product; 
} 

ответ

1

Как я обходил это в прошлом было путем включения внешнего ключа поддержки в БД с PRAGMA ключевого слова. Насколько мне известно, внешние ключи поддерживаются, но вам нужно их включить. SQL для этого:

PRAGMA foreign_keys=ON; 

Я использовал, чтобы сделать это на SQLOpenHelper на void onOpen(SQLiteDatabase db), так что-то вроде:

db.execSQL("PRAGMA foreign_keys=ON;"); 

Я сделал это только тогда, когда дб был доступен для записи.

Что касается ваших моделей, они, похоже, правильно настроены.

Примечание: Там, насколько я знаю, есть 2 нижних стороны. Во-первых, это поддержка только от android 2.2 (включая мои лучшие знания) из-за версии sqlite. Также google, похоже, рекомендует делать это где-то еще, но это было в методах, поддерживаемых только после api 16, поэтому я продолжал делать это внутри db.execSQL("PRAGMA foreign_keys=ON;");.

+0

Хорошо, я включу внешние ключи, однако, как мне сделать удаление самостоятельно? Если он включен, и я использую ProductDAO для удаления продукта, он автоматически удалит ProductPhoto? –

+0

Да, это должно быть просто удаление одного из объектов из продукта – Fred

+0

Попробует в течение нескольких дней, когда API будет готов и сообщит вам, как это работает. Благодаря! –

 Смежные вопросы

  • Нет связанных вопросов^_^