2012-10-14 77 views
1

我僅在註解中使用hibernate。我的表看起來是這樣的:不使用主鍵檢查uniq約束條件

@Entity 
@Table(name = "NetworkType", 
    uniqueConstraints = {@UniqueConstraint(columnNames = {"network_id", "type"})}) 

public class NetworkType implements Serializable { 

    @Id 
    private long id; 

    @Column(name = "network_id", nullable = false) 
    private long networkId; 

    @Column(name = "type", nullable = false) 
    private String type; 
    ... 

目前,當我寫相同的網絡類型的兩倍,它拋出一個異常,由於的UniqueConstraint(預計)。

我的想法是在檢查前先閱讀該項目。問題是,我的主鍵是Id,我需要它,因爲其他表引用此表。

什麼是最好的方式來查詢「network_id」和「type」來驗證組合不存在?

我知道我可以用一個查詢手動做到這一點,但是有沒有更多的Hibernate-y的方式來做到這一點?

一般來說,在不使用PK的情況下「獲取」物體的正確方法是什麼?是標準還是查詢的最佳方式?

回答

0

@UniqueConstraint主要用於數據庫模式生成工具來創建數據庫模式。如果使用,他們將生成具有定義的唯一約束的@UniqueConstraint中提到的列。

@UniqueConstraint在數據處理過程中沒有任何影響/使用。

如果你想實現對network_idtype列唯一約束行爲,並已建立自己的模式,更新數據庫模式上network_idtype列添加unique constraint如下:

ALTER TABLE NetworkType 
    ADD CONSTRAINT uc_network_id_type UNIQUE (network_id, type) 

希望這有助於!