Java 在提交使用Hibernate创建用户之前,如何检查数据库中是否存在用户名?
您好,我用GWT、Hibernate和HSQLDB提供了一个简单的登录服务 现在我可以创建帐户,但是,我需要添加一个功能,在提交到数据库之前检查用户名是否已经在数据库中 LoginServiceImpl.javaJava 在提交使用Hibernate创建用户之前,如何检查数据库中是否存在用户名?,java,hibernate,gwt,Java,Hibernate,Gwt,您好,我用GWT、Hibernate和HSQLDB提供了一个简单的登录服务 现在我可以创建帐户,但是,我需要添加一个功能,在提交到数据库之前检查用户名是否已经在数据库中 LoginServiceImpl.java @Override public void createAccount(Account user) { try { Session session = HibernateUtil.getSessionFactory().getCurrentSession();
@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,这是一个语法错误,我已经通过重新编写上面显示的代码修复了它。干杯