我有這樣的代碼:JPA的註解@UniqueConstraint似乎並不保證唯一性
@Table(uniqueConstraints = @UniqueConstraint(columnNames = {"name", "color"}))
@MappedSuperclass
public abstract class AbstractInstance extends Model {
@NotNull
public String name;
public String color;
...
}
,但由於某些原因,@UniqueConstraint
沒有任何影響 - 我把在DB的多個實例具有完全相同的名稱成功和顏色(當我查詢color='green' AND name='MyName'
時,我得到多個結果)。難道我做錯了什麼?我是否應該採取其他措施來使此化合物唯一性約束生效?
問題的另一個證據可能是,當我查詢數據庫的關於我的相關表INFORMATION_SCHEMA.CONSTRAINTS,我得到這樣的結果,其似乎不提「名」和「顏色」作爲唯一的:
CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | CONSTRAINT_NAME | CONSTRAINT_TYPE | UNIQUE_INDEX_NAME | CHECK_EXPRESSION | COLUMN_LIST | SQL
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
play | public | fkcb0e606fe2f3066d | REFERENTIAL | PRIMARY_KEY_8 | null | CONTAINER_ID | ALTER TABLE PUBLIC.UNLABELEDINSTANCE ADD
| | | | | | | CONSTRAINT PUBLIC.FKCB0E606FE2F3066D FOREIGN
| | | | | | | KEY(CONTAINER_ID) INDEX
| | | | | | | PUBLIC.FKCB0E606FE2F3066D_INDEX_C REFERENCES
| | | | | | | PUBLIC.DATASET(ID) NOCHECK
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
play | public | constraint_d7 | PRIMARY KEY | PRIMARY_KEY_C | null | ID | ALTER TABLE PUBLIC.UNLABELEDINSTANCE ADD
| | | | | | | CONSTRAINT PUBLIC.CONSTRAINT_D7 PRIMARY KEY(ID)
| | | | | | | INDEX PUBLIC.PRIMARY_KEY_C
我使用:
- 的Java 1.7
- Hibernate提供了Maven的依賴關係:org.hibernate.javax.persistence:休眠,JPA-2.0-API:1.0.1.Final(我不知道如何從中推斷出JPA \ Hibernate的版本)
- 播放框架1.2.7
- H2數據庫(即自帶播放框架,爲內存DB一)
您是否使用JPA生成數據庫模式?請顯示架構轉儲。你也可以配置Hibernate,使列名不像你在註釋中列出的那樣。 – chrylis 2014-10-21 22:50:50
如何生成架構轉儲?什麼是相關的Hibernate配置? – OferBr 2014-10-21 22:53:16
在你的persistence.xml中,你有一個屬性 ? –
Multisync
2014-10-21 23:24:17