2016-04-08 11 views
0

Ich habe eine Tabelle wie folgt definiert:aktualisieren UniqueConstrains auf einer JPA Tabelle

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

Ich möchte die eindeutige Einschränkung ändern es entspannter zu machen:

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

Der aktualisierte Code kompiliert, aber JPA ändert das Tabellenschema nicht. Gibt es eine Konfigurationseinstellung, die ich verwenden muss?

Wenn JPA dies nicht tun können, was ist der systematische Ansatz für dieses Problem? Ich kann eine Migration schreiben, JPA generiert jedoch automatisch den Namen für die Abhängigkeit, daher ist es nicht offensichtlich, wie die alte Einschränkung aufgehoben wird.

Nicht sicher, ob es wichtig ist, aber ich bin mit Hibernate und MySQL.

+1

Sie konnten nicht auf JPA verlassen, um die Tabellen für Sie erstellen und eine Lösung verwenden, wie [flyway] (https://flywaydb.org/), wo Sie alle Änderungen werden sich. – hakamairi

+0

Ich stimme mit Blazej überein. Wenn Sie eine Datenbank wie PostgreSQL verwenden, können Sie außerdem die Einschränkung DEFERRABLE erstellen, mit der Sie Constraints aktualisieren können, aber die DB führt die referenzielle Prüfung erst am Ende der Transaktion durch. – sagneta

Antwort

0

Da Sie Hibernate verwenden, ist es eine Eigenschaft für Ihr Schema automatisch zu aktualisieren: hibernate.hbm2ddl.auto mit dem Wert Update

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

(aber bewusst sein, dass dies nicht der Fall empfohlen es auf Produktion zu verwenden)

+0

Interessanterweise habe ich 'hibernate.hbm2ddl.auto' auf 'update' gesetzt, sowohl für die Entwicklung als auch für die Produktion, und die Einschränkung wurde immer noch nicht aktualisiert. –

Verwandte Themen