使用以下代码:

@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中使用相同的名称。

10-04 18:53