2010-06-18 15 views
8

Aşağıdaki kodu kullanarak:Hibernate: @ManyToOne alanı ile @UniqueConstraint?

@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 
} 

Bunun aslında bir ayrı UniqueConstraint oluşturduğunu hayal ettiğim @ManyToOne kısıtlaması ile ilgisi var gibi görünüyor ???

Her durumda, UniqueConstraint hakkında bir şikayette bulunmaz, ancak bana bırakılması gerektiğine inanan başka bir hata var.

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

Herhangi bir ipucunu nasıl oluşturabilirim Bu tür bir kısıtlama (yani, her bir hesap ve ad kombinasyonu her seferinde sadece bir kez oluşur ???)

Teşekkürler!

Misha

+0

@ Peter'ın çözümü sizin için çalıştı mı? – Reddy

cevap

12

çözüm:

@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 
} 

Açıklama: oluşturulan tabloda @ManyToOne için sütun adı muhtemelen ACCOUNT_ID yerine hesaba gibi bir şey olacaktır. @UniqueConstraint, sınıfınızda kullandığınız adın tam sütun adını bekler. Çalıştığından emin olmak için, bu sütuna @JoinColumn ile belirli bir ad verin ve aynı adın UniqueConstraint öğesinde kullanıldığından emin olun.

İlgili konular