Подтвердить что ты не робот

Создание ограничений внешнего ключа в ORMLite в SQLite

Как нельзя добавить внешние ключи с помощью инструкции "ALTER TABLE" в SQLite, я зациклился на том, как настроить мою базу данных для принудительного ввода действительных внешних ключей или выполнить каскадные удаления без явных служебных данных кода.

Кто-нибудь понял, как это сделать с ORMLite в SQLite?

4b9b3361

Ответ 1

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

ORMLite поддерживает поле columnDefinition="..." в аннотации @DatabaseFiled @Timo. Я не уверен, что он предоставляет вам необходимую вам мощность, но он позволяет вам создавать пользовательские определения столбцов.

http://ormlite.com/javadoc/ormlite-core/com/j256/ormlite/field/DatabaseField.html#columnDefinition()

Если это не так, я боюсь, что вам, возможно, придется создать свою базу данных вне ORMLite в этом случае. Вы можете использовать TableUtils.getCreateTableStatements(), чтобы получить инструкции, необходимые для создания таблицы, и добавить необходимые вам принудительные и каскадные утверждения. Ниже приведены javadocs для этого метода.

Ответ 2

Чтобы рассказать о Серьезном ответе (для любого другого, кто наткнулся на этот вопрос), вы можете использовать аннотацию columnDefinition для определения ограничения внешнего ключа и каскадного удаления.

Во-первых, ограничения внешнего ключа были добавлены в SQLite в 3.6.19, а это значит, что вы можете использовать их в Android 2.2 или выше (начиная с версии 2.2 поставляется с SQLite 3.6.22). Однако ограничения внешнего ключа не включены по умолчанию. Чтобы включить их, используйте технику этот ответ.

Здесь приведен пример аннотации columnDefinition. Это предполагает, что ваш стол/объект, на который вы ссылаетесь, называется parent, у которого есть первичный ключ id.

@DatabaseField(foreign = true,
      columnDefinition = "integer references parent(id) on delete cascade")
private Parent parent;

Обратите внимание, что формат для значения String не включает имя столбца (что означает аннотация columnName).

Ответ 3

Я думаю, что следующая ссылка может быть полезна:

http://mueller.panopticdev.com/2011/03/ormlite-and-android.html

вы можете установить его как:

public class Person {
...
@DatabaseField(columnName = "organization_id", canBeNull = false)
private Organization m_organization;

Таким образом, у человека есть внешний ключ для организации, а ключ, который он использует для организации, - "organization_id".

Надеюсь, что это поможет.