2010-06-18 74 views
8

使用下面的代碼:Hibernate:@UniqueConstraint與@ManyToOne字段?

@Entity 
@Table(uniqueConstraints=[@UniqueConstraint(columnNames=["account","name"])]) 
class Friend { 
    @Id @GeneratedValue(strategy=GenerationType.AUTO) 
    public Long id 
    @ManyToOne 
    public Account account 
    public String href 
    public String name 
} 

我得到以下錯誤:

org.hibernate.AnnotationException: Unable to create unique key constraint (account, name) on table Friend: account not found 

看來這已與@ManyToOne約束做,這是我想象實際上創建了一個單獨的UniqueConstraint ???

在任何情況下,如果我參加了這一點,沒有對的UniqueConstraint的投訴,但還有另外一個錯誤,讓我相信它必須要離開了。

org.hibernate.MappingException: Could not determine type for: com.mksoft.fbautomate.domain.Account, at table: Friend, for columns: [org.hibernate.mapping.Column(account)] 

任何提示我怎麼可以創建這樣一個期望的約束(即,每個帳戶和名稱的組合只出現一次?)

謝謝!

米莎

+0

@彼得的解決方案爲你工作? – Reddy 2012-08-23 10:54:56

回答

12

解決辦法:

@Entity 
@Table(uniqueConstraints=[@UniqueConstraint(columnNames=["myaccountcolum","name"])]) 
class Friend { 
    @Id @GeneratedValue(strategy=GenerationType.AUTO) 
    public Long id 
    @ManyToOne 
    @JoinColumn(name="myaccountcolum") 
    public Account account 
    public String href 
    public String name 
} 

說明: 在生成的表的@ManyToOne列的名字可能會是這樣的ACCOUNT_ID,而不是賬戶。 @UniqueConstraint需要確切的列名稱,而不是您在類中使用的名稱。爲了確保它正常工作,請使用@JoinColumn爲此列指定一個特定的名稱,並確保在您的UniqueConstraint中使用相同的名稱。