Hibernate:@UniqueConstraint和@ManyToOne字段?

Миш*_*лев 8 groovy hibernate

使用以下代码:

@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
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

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

这似乎与@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)]
Run Code Online (Sandbox Code Playgroud)

任何提示如何创建这样一个所需的约束(即,帐户和名称的每个组合只出现一次???)

谢谢!

米莎

小智 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
}
Run Code Online (Sandbox Code Playgroud)

说明:生成的表中@ManyToOne的列名可能类似于account_id而不是account.@UniqueConstraint需要确切的列名,而不是您在类中使用的名称.要确保它正常工作,请使用@JoinColumn为此列指定一个特定名称,并确保在UniqueConstraint中使用相同的名称.