2016-04-08 3 views
0

Я таблица определяется следующим образом:Обновление UniqueConstrains на столе JPA

@Entity 
@Table(
     uniqueConstraints = {@UniqueConstraint(columnNames = {"reward_id", "transaction_id"})} 
) 
public class ShipmentItem extends Model { 
    ... 
} 

Я хочу, чтобы изменить ограничение уникальности, чтобы сделать его более расслабленным:

@Entity 
@Table(
     uniqueConstraints = {@UniqueConstraint(columnNames = {"reward_id", "transaction_id", "sku"})} 
) 
public class ShipmentItem extends Model { 
    ... 
} 

Обновленный код компилируется, но JPA не меняет схему таблицы. Есть ли настройка, которую мне нужно использовать?

Если JPA не может этого сделать, каков системный подход к этой проблеме? Я могу написать миграцию, однако JPA автоматически генерирует имя для ограничения, поэтому неясно, как отказаться от старого ограничения.

Не уверен, если это имеет значение, но я использую hibernate и mysql.

+1

Вы не можете полагаться на JPA, создающую таблицы для вас, и использовать такое решение, как [flyway] (https://flywaydb.org/), где вы внесете все изменения самостоятельно. – hakamairi

+0

Я согласен с Blazej. Кроме того, если вы используете базу данных, такую ​​как PostgreSQL, вы можете создать ограничение DEFERRABLE, которое решит разрешить вам обновление ограничений, но БД не будет выполнять ссылочную проверку до конца транзакции. – sagneta

ответ

0

Поскольку вы используете спящий режим, есть свойство для автоматического обновления вашей схемы: hibernate.hbm2ddl.auto со значением обновления

https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/session-configuration.html

(Но помните, что это не так рекомендуется использовать его на Production)

+0

Интересно, что у меня есть «hibernate.hbm2ddl.auto», установленный для «обновления» для разработки и производства, и он все еще не обновил ограничение. –

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