2012-05-04 5 views
1

я просто переключил свой persistence.xml отраскрывающихся и создать столы падает слишком легко

<property name="toplink.ddl-generation" value="drop-and-create-tables"/> 

в

<property name="toplink.ddl-generation" value="create-tables"/> 

и теперь данные сохраняется между запусками приложения, как я бы ожидать. Однако это не совсем так, как я ожидал бы, что эта настройка будет работать. Не следует ли создавать drop-and-create только при отсутствии или несоответствии таблицы?

Мне просто интересно, является ли это стандартным, или, возможно, указание на то, что я не использую JPA правильно, что таблица слишком легко удаляется, когда устанавливается drop-and-create.

+1

Drop-create отлично подходит для тестов интеграции, и это в основном его цель. –

+0

ах, это объясняет цель! теперь имеет больше смысла. – Thufir

ответ

1

это предназначенное поведение.

create-tables будет пытаться создать таблицы, если таблица уже существует, то она не будет удалена или заменена, будет использоваться существующая таблица. Это не проверьте, соответствует ли таблица той, которую вы пытаетесь создать, - только если таблица с заданным именем существует. Если ваша схема изменится, вам придется вручную отбросить таблицу (или через другой маханизм), чтобы она была вновь создана в следующий раз.

drop-and-create-tables сначала отбросит существующую таблицу, а затем создаст новую таблицу. Обратите внимание, что это приведет к потере всех данных в таблицах при их удалении.

+0

Хорошо, спасибо за быстрый ответ и подтверждение того, что это предполагаемое поведение. Я не думаю, что это ** правильное поведение, но это только мое мнение. Во всяком случае, хорошо знать, еще раз спасибо. – Thufir

1

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

+0

Марко Тополник объясняет в комментарии по вопросу о том, что цель заключается в интеграционных тестах. – Thufir

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