休眠在两列中唯一

时间:2019-04-05 09:06:44

标签: mysql hibernate

提供一个包含用户名和电子邮件的用户表。用户可以使用用户名和电子邮件登录。用户可以选择电子邮件作为其用户名。

用户更改用户名或电子邮件时,新值在所有用户名和电子邮件的组合中必须唯一

是否可以使用休眠符号对它进行建模,还是需要像Java验证例程那样在更高级别上进行?

小例子:

| username | email      |
|----------+------------|
| user1    | a@smth.com |
| user2    | b@smth.com |

user2将用户名更改为a@smth.com应该是非法的操作,因为user1已经具有此值作为其电子邮件地址。

2 个答案:

答案 0 :(得分:1)

以下是示例代码,供您参考。

@Entity()
@Table(name = "users",uniqueConstraints= @UniqueConstraint(columnNames = {"email", "username"}) )
public class Employee {

    @Column(name = "username")
    private String username;

    @Column(name = "email")
    private String email;

    //All other user entity fields and getters/setters etc......
}

这里是link供您参考。

答案 1 :(得分:0)

@coladict说:

  

然后,JPA或Hibernate不支持所需的内容。如果您的数据库版本为8.0.16或更高版本,则可以添加检查约束,但是在调用persist(user)之前,您必须手动执行检查约束

这不在休眠的可能性范围内。我们的解决方案是在验证对象时进行检查。当然,这是以计算为代价的,我们必须确保在数据库中有相应的索引,以尽可能缩短查询时间。