在多个列上创建复合唯一约束

rip*_*234 54 java persistence jpa playframework

这是我的模特:

class User {...}
class Book {
  User author;
  int number;
}
Run Code Online (Sandbox Code Playgroud)

每个书籍编号从每位作者1开始,并向上递增.所以我们将获得John Grisham的书籍1,2,3,George Martin的书籍1 ...等等......

是否有一个我可以放置的独特约束Book,这可以保证我们没有同一作者的两本具有相同编号的书籍?类似@Column(unique = true),但约束只适用于复合Author X number

axt*_*avt 112

用途@UniqueConstraint:

@Table(
    uniqueConstraints=
        @UniqueConstraint(columnNames={"author_id", "number"})
)
@Entity
class Book extends Model {
   @ManyToOne
   @JoinColumn(name = "author_id")
   User author;
   int number; 
} 
Run Code Online (Sandbox Code Playgroud)

  • 对于多个复合 uniqueConstraint,语法为 @Table(uniqueConstraints = {@UniqueConstraint(columnNames = { "field1", "field2", "field3" }), @UniqueConstraint(columnNames = {"field4", "field5"}) }) ) (2认同)

小智 6

之前创建表时,需要将其删除。唯一键不会添加到现有表中。