在一个Web应用程序中,我让用户创建一个Item。通过dao实现来完成db操作。
通用dao实现使用Criteria进行查询

一个项目的名称是唯一的。因此,我必须防止用户创建两个具有相同名称的项目。
我应该如何在代码中执行此操作?每次用户尝试创建商品时,都应调用itemDao.findItemByName(newname),
如果项目存在,则向用户显示错误消息?还是应该将项目创建代码放入try catch块,catch异常,
并告诉用户创建新项目的尝试失败了?

在我看来,第一种方法是让我向用户提供更精确的错误消息。但这将涉及一个数据库检查调用
每次尝试创建项目时,第二个将是dao类中引发的一些异常且不太具体。

我会对此提出一些建议。

真诚地

吉姆

通用DaoImpl

...
public T findUniqueItemByProperty(String propName,String propVal){
    Class clz = getPersistentClass();
    Session session = getSession();
    logger.info("session="+session.hashCode());
    Criteria cri = session.createCriteria(clz).add(Restrictions.eq(propName,propVal));
    return (T)cri.uniqueResult();
}

public void saveOrUpdate(T obj) {
    getSession().saveOrUpdate(obj);
}
...


项道

...
public Item findItemByName(String name){
    return findUniqueItemByProperty("name",name);
}
public void saveOrUpdateItem(Item item){
    saveOrUpdate(item);
}

最佳答案

您可以使用where name=?进行条件更新,如果更新的行数为0,请插入。而且,如果您将name用作密钥,则Hibernate会通过saveOrUpdate为您解决它。无论如何,名称可能应该被索引。

关于java - 如何使用dao,hibernate检查同名商品,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6964624/

10-11 01:12