Как проверить имя пользователя, если оно существует в базе данных, прежде чем создавать пользователя с помощью Hibernate? - PullRequest
3 голосов
/ 29 июня 2011

Привет, есть простой сервис входа, который я сделал с помощью 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;
      }
}

Ответы [ 3 ]

5 голосов
/ 29 июня 2011
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
} 
2 голосов
/ 29 июня 2011

Я бы добавил что-то подобное в ваш Account класс.Это гарантирует, что проверка всегда выполняется при сохранении модели, вместо того чтобы вручную добавлять проверку к каждому фрагменту кода, который сохраняет модель.

@PrePersist
public void prepareToInsert() {
    List<User> conflicts = find("user=?").fetch();
    if (!conflicts.isEmpty()) {
         throw new IllegalArgumentException("username `" + name + "` is already taken");
    }
}
0 голосов
/ 29 июня 2011

записать логику проверки уже доступного пользователя в методе set, и оно должно вернуть исключение, когда пользователь уже существует.однако я очень новичок в hibernate, давайте посмотрим, есть ли у любого эксперта простое решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...