foreignAutoCreate не работает? - PullRequest
       6

foreignAutoCreate не работает?

1 голос
/ 04 ноября 2011

В моем проекте я кэшировал внешние аннотации и все вручную вставлял и удалял каскадирование, но сейчас я пытаюсь обновить свой код для использования новой аннотации foreignAutoCreate, и я заметил несколько проблем.Во-первых, DatabaseFieldConfigLoader не добавляет это поле в сгенерированный файл конфигурации.Соответствующий код может отсутствовать в строке 212 версии 4.29 этого класса.

Даже после ручного добавления определения в файл конфигурации кажется, что оно неправильно устанавливается при загрузке файла конфигурации.В строке 102 класса MappedCreate tableInfo.isForeignAutoCreate () возвращает false для классов, для которых установлена ​​аннотация

Для справки, вот как я объявил свой член класса:

@DatabaseFieldSimple
@DatabaseFieldForeign(foreign = true, foreignAutoRefresh=true, foreignAutoCreate=true)
public Response response;

И у моего дочернего класса Response есть следующее поле id

@DatabaseFieldSimple
@DatabaseFieldId(generatedId = true)
public int id;

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 04 ноября 2011

К сожалению, поле foreignAutoRefresh (а также version) неправильно настроено с использованием DatabaseFieldConfigLoader - как для чтения, так и для записи конфигурации класса. Я открыл эту ошибку и исправил ее в багажнике. Исправление было добавлено в ORMLite в версии 4.30.

Я добавил комментарии в конец @DatabaseField, чтобы [надеюсь] защитить от этого в будущем.

Извините за ошибку.

2 голосов
/ 13 октября 2013

Эта ссылка будет очень полезна, проверьте примечания по использованию (foreignAutoCreate = true), которые:

  1. (foreignAutoCreate = true) работают, только если идентификаторполе не установлено (null или 0) в соответствии с документацией ORMlite http://ormlite.com/javadoc/ormlite-core/com/j256/ormlite/field/DatabaseField.html

    foreignAutoCreate: "Установите для этого параметра значение true (по умолчанию false), чтобы внешнее поле автоматически создавалось с использованием его внутреннего DAO, если идентификаторполе не задано (null или 0). "

  2. Это работает только в том случае, если для параметра geneI также установлено значение true для дочерней таблицы в соответствии с документацией ORMlite .

...