Самый эффективный способ определить, пуста ли таблица Lua (не содержит записей)?

Этот ответ был сделан pre-JPA2 реализациями при использовании JPA2 см. ответ ElementCollection выше:

Списки объектов в объекте модели обычно считают отношениями "OneToMany" с другим объектом. Однако Строка не является (отдельно) допустимым клиентом Связи "один ко многим", поскольку она не имеет идентификатора.

Так, Вы должны преобразовывать свой список Строк к списку объектов Argument-class JPA, содержащих идентификатор и Строку. Вы могли потенциально использовать Строку в качестве идентификатора, который оставит немного свободного места в Вашей таблице и от удаления поля ID и путем консолидации строк, где Строки равны, но Вы потеряли бы способность заказать аргументы назад в их первоначальный заказ (поскольку Вы не сохранили информации для заказа).

, С другой стороны, Вы могли преобразовать свой список в @Transient и добавить другое поле (argStorage) к Вашему классу, который является любой VARCHAR () или CLOB. Необходимо будет тогда добавить 3 функции: 2 из них являются тем же и должны преобразовать Ваш список Строк в единственную Строку (в argStorage) разграниченный способом, что можно легко разделить их. Аннотируйте эти две функции (что каждый делает то же самое) с @PrePersist и @PreUpdate. Наконец, добавьте третью функцию, которая разделяет argStorage на список Строк снова, и аннотируйте его @PostLoad. Это будет держать Ваш CLOB в курсе со строками каждый раз, когда Вы идете, чтобы сохранить Команду и держать argStorage поле в курсе перед хранением его к DB.

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

114
задан Yu Hao 4 May 2016 в 15:50
поделиться

2 ответа

Ваш код эффективен, но неверен. (Рассмотрим {[false] = 0} .) Правильный код -

if next(myTable) == nil then
   -- myTable is empty
end

Для максимальной эффективности вам нужно привязать следующий к локальной переменной, например,

...
local next = next 
...
... if next(...) ...
140
ответ дан 24 November 2019 в 02:36
поделиться

Одна из возможностей - подсчитать количество элементов с помощью метатабельного ключа newindex. При назначении чего-либо, отличного от nil , увеличивайте счетчик (счетчик также может находиться в метатаблице), а при назначении nil уменьшайте счетчик.

Тестирование для пустой таблицы будет для проверки счетчика с 0.

Вот указатель на метатаблицу

Мне нравится ваше решение, и я, честно говоря, не могу предположить, что мое решение в целом быстрее.

1
ответ дан 24 November 2019 в 02:36
поделиться