这是我的模特:
class User {...}
class Book {
User author;
int number;
}
每位作者的每本书编号从1开始,并向上递增。因此,我们将获得John Grisham的书籍1,2,3,George Martin的书籍1 ...等等......
我可以在Book
上放置一个独特的约束,这可以保证我们没有两本同一作者的同一号码的书吗?与@Column(unique = true)
类似,但约束仅适用于Author X number
?
答案 0 :(得分:101)
@Table(
uniqueConstraints=
@UniqueConstraint(columnNames={"author_id", "number"})
)
@Entity
class Book extends Model {
@ManyToOne
@JoinColumn(name = "author_id")
User author;
int number;
}
答案 1 :(得分:4)
以前创建表时,必须将其删除。唯一键不会添加到现有表中。
答案 2 :(得分:0)
正如@axtavt所回答的那样,您可以使用var result = myObj.concat(anotherObj);
方法。但是在现有表格的情况下,有多种可能性。并非所有时间,但一般情况下,您可能会得到 SQLException 。
原因是您的表中可能存在一些与Composite Unique键冲突的现有数据。所以你要做的就是首先手动检查(通过使用简单的SQL查询),如果所有现有数据都适合使用Composite Unique Key。当然,如果没有,则删除导致违规的数据。 (另一种方法是删除整个现有表,但只能使用它不包含任何重要数据)。