繁体   English   中英

当实体的两个字段为(unique = true)时,如何处理JPA异常?

[英]How to handle JPA exceptions when two fields of an entity are (unique = true)?

假设我有以下实体:

@Entity
@Table(name = "accounts")
public class AccountImpl implements Account {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(name = "id", nullable = false, unique = true)
  private Long id;

  @Column(name = "email", nullable = false, unique = true)
  private String email;

  @Column(name = "username", nullable = false, unique = true)
  private String username;

  // constructor + getters

}

电子邮件和用户名字段设置为唯一。 现在,如果使用重复的电子邮件或另一个对象的用户名创建一个对象,则JPA将引发“持久性异常”。 如何创建单独的处理程序来处理重复的电子邮件和用户名?

    Account account = new AccountImpl(email, username, password, role);
    try {
        service.createAccount(account);
    } catch(javax.persistence.PersistenceException e) {
        addFieldError("username", "Username taken");

        // Oh crap! What if the exception has been thrown by email?

        return INPUT;
    }

谢谢

一种方法是在createAccount根据username进行搜索之前,如果它返回一条记录,则意味着该username已被使用,并返回适当的消息,对于email ,您也可以这样做。

如果两个搜索none返回,则您知道其新帐户,然后执行createAccount

好吧,您可以在尝试保留对象之前检查重复项,并根据结果返回正确的错误或保留对象...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM