使用以下代码:
@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)]
任何提示都表明我如何创建所需的约束(即帐户和名称的每种组合仅出现一次?)
谢谢!
米莎
最佳答案
解决方案:
@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而不是account。 @UniqueConstraint需要确切的列名,而不是您在类中使用的名称。为了确保它能正常工作,请使用@JoinColumn为该列指定一个特定的名称,并确保在UniqueConstraint中使用相同的名称。