gpt4 book ai didi

java - 了解 JPA 唯一约束的原因

转载 作者:搜寻专家 更新时间:2023-11-01 03:29:52 24 4
gpt4 key购买 nike

我正在尝试学习 JPA,但我遇到了一个问题,我已经坚持了 2 天了。

我有一个名为“用户”的表,包括 ID、电子邮件、密码、用户名和状态。

如您所料,电子邮件和用户名列是唯一的。

我还有一个名为 User 的类:

@Entity
@Table(name = "user", uniqueConstraints = @UniqueConstraint(columnNames = {"username", "email"}))
public class User {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@Column(name="email", nullable=false)
private String email;
@Column(name="password", nullable=false)
private String password;
@Column(name="username", nullable=false)
private String username;
@Column(name="status", nullable=false)
private String status;

这个类的其余部分是 getter 和 setter。

我正在尝试通过将 JPA 与 Hibernate 结合使用来插入一个值。

    try {
em = jpaResourceBean.getEMF().createEntityManager();
em.getTransaction().begin();
user.setStatus(UserStatus.PENDING.toString());
em.persist(user);
em.getTransaction().commit();
logger.info("User " + user.getUsername() + " has been registered");
// Attention starts
} catch (XXXXXX) {
if (XXXXX.getYYY().equals("ZZZZZ")) logger.info("User name is already exist");
if (XXXXX.getMMM().equals("LLLLL")) logger.info("Email is already exist");
}
// Attention end

我只想知道:我如何理解用户名约束或电子邮件唯一约束的问题?虽然您可以查看我的 Attention 开始和结束 block ,但我相信您明白我的意思 :)

提前致谢。

最佳答案

您不应该在生产中使用自动生成的模式,所以为什么不简单地在您的模式中设置约束名称。然后当异常产生时,你会得到失败的约束名。

create table users (
user varchar2(20) not null,
email varchar2(20) not null,

constraint user_uq unique(user),
constraint email_uq unique(email)
)

你可能想在插入之前查看数据库,看看它们是否已经存在......这样你很可能不会得到异常......

关于java - 了解 JPA 唯一约束的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3373005/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com