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

时间:2011-06-29 05:26:12

标签: java hibernate gwt

您好,我使用GWT,Hibernate& amp; 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;
      }
}

3 个答案:

答案 0 :(得分:5)

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
} 

答案 1 :(得分:2)

我会在你的Account课程中添加这样的内容。这样可以确保在保存模型时始终执行检查,而不必手动将检查添加到保存模型的每段代码中。

@PrePersist
public void prepareToInsert() {
    List<User> conflicts = find("user=?").fetch();
    if (!conflicts.isEmpty()) {
         throw new IllegalArgumentException("username `" + name + "` is already taken");
    }
}

答案 2 :(得分:0)

编写在set方法中检查已经可用的用户的逻辑,并且当用户已经存在时它应该返回异常。但是我对hibernate很新,可以看看是否有专家有一个简单的解决方案。