Java 在提交使用Hibernate创建用户之前,如何检查数据库中是否存在用户名?

Java 在提交使用Hibernate创建用户之前,如何检查数据库中是否存在用户名?,java,hibernate,gwt,Java,Hibernate,Gwt,您好,我用GWT、Hibernate和HSQLDB提供了一个简单的登录服务 现在我可以创建帐户,但是,我需要添加一个功能,在提交到数据库之前检查用户名是否已经在数据库中 LoginServiceImpl.java @Override public void createAccount(Account user) { try { Session session = HibernateUtil.getSessionFactory().getCurrentSession();

您好,我用GWT、Hibernate和HSQLDB提供了一个简单的登录服务

现在我可以创建帐户,但是,我需要添加一个功能,在提交到数据库之前检查用户名是否已经在数据库中

LoginServiceImpl.java

@Override
public void createAccount(Account user) {

    try {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        session.save(user);
        session.getTransaction().commit();
    }catch (HibernateException e) {
        e.printStackTrace();
    }catch (InvocationException e) {
        e.printStackTrace();

    }
}
Account.java

public class Account implements Serializable {
      Long id;
      String name;
      String password;
  public Account() {
      }
      public Account(Long id) {
        this.id = id;
      }
      public String getPassword() {
        return password;
      }
      public void setPassword(String password) {
        this.password = password;
      }
      public Long getId() {
        return id;
      }
      public String getName() {
        return name;
      }
      public void setName(String name) {
        this.name = name;
      }
      public void setId(Long id) {
            this.id = id;
      }
}

在set方法中编写检查已经可用的用户的逻辑,当用户已经存在时,它应该返回一个异常。不过,我对hibernate非常陌生,让我们看看是否有专家有一个简单的解决方案。

我想在您的
帐户中添加类似的内容。这样可以确保在保存模型时始终执行检查,而不必手动将检查添加到保存模型的每段代码中

Query query=  session.createQuery("from Account where name=?");

Account user=(Account)query.setString(0,user.getName()).uniqueResult();
if(user!=null){
   //Do whatever you want to do
}else{
  //Insert user
} 
@PrePersist
public void prepareToInsert() {
    List<User> conflicts = find("user=?").fetch();
    if (!conflicts.isEmpty()) {
         throw new IllegalArgumentException("username `" + name + "` is already taken");
    }
}
@PrePersist
公开作废准备插入(){
列表冲突=查找(“用户=?”).fetch();
如果(!conflicts.isEmpty()){
抛出新的IllegalArgumentException(“用户名”+“名称”+“`已被接受”);
}
}

@bernace,你能详细说明我应该如何将其添加到Account类中吗?@Talha,这是一个语法错误,我已经通过重新编写上面显示的代码修复了它。干杯