尝试使用hibernate 4测试记录的存在

时间:2017-12-11 16:11:30

标签: java spring hibernate

我在Spring 4控制器中有一个addEmployee网络服务,如接受emp_namedefinition的代码所示。 在调用insertIntegertype方法时,使用Hibernate 4进行数据库表中的插入。

@RequestMapping(value="/addEmployee", method=RequestMethod.GET)
    public String addEmployee
    (
        @RequestParam(value="name", defaultValue="") String emp_name,   
        @RequestParam(value="definition", defaultValue="") String definition
    ) 
    {  int emp_id = 0;

        try {
            EmpDao empDao = (EmpDao)context.getBean("empDao");
            Emp empInsert = new Emp();

            empInsert.setName(emp_name+" Attributes");
            empInsert.setDefinition(definition);
            empInsert.setOwnerName(owner_name_);
            emp_id = empDao.insertIntegertype(empInsert);

            }catch (Throwable th){
            // some code here 
            }
    }

需要包含以下内容:

正如在设置员工姓名时代码中所述,我还在此行Attributes中添加了empInsert.setName(emp_name+" Attributes");个字词 因此,可能存在这样的情况,即数据库中已存在相同的名称,并且在该场景中,我想测试 该名称是否已存在于数据库中,然后仅继续插入。 我想知道是否有一种方法可以帮助我解决这个问题呢?

如果需要,我的insertIntegertype hibernate方法定义如下

public int insertIntegertype(Emp emp)
    {
        logger.debug("Starting EmpDaoImpl.insert() .....");
        Session session = null;
        Transaction tx = null;
        boolean status = true;
        int Emp_id = 0;
        try {
            session = sessionFactory.openSession();
            tx = session.beginTransaction();
            session.persist(emp);
            tx.commit();
            Emp_id = emp.getEmpId();
        } catch(Exception ex) {
            tx.rollback();
            ex.printStackTrace();
            status = false;
        } finally {
            session.close();
        }
        logger.debug("Completed EmpDaoImpl.insert() .....");
        return Emp_id;
    }       

2 个答案:

答案 0 :(得分:1)

方法: 使用之类的“名称%”进行选择查询如果不存在则进行插入

您有3个选项:

  

1 - 使用原生查询

Session session = sessionFactory.openSession();
session.beginTransaction();
Query query = session.createQuery("select u.name from Employee u where u.name like :Name");
List<Object[]> list= query.setParameter("Name", name+ "%").list();
if (list.isEmpty()) {
session.persist(emp);
}
  

2 - 使用HQL

Session session = sessionFactory.openSession();
session.beginTransaction();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<String> criteria = builder.createQuery(String.class);
Root  root = criteria.from(class);
Path <String> attribute = root.get(col);
criteria.select(attribute).where(builder.(attribute,NAME + "%"));
List<String> list = session.createQuery(criteria).getResultList();
if (list.isEmpty()) {
session.persist(emp);
}
  

3 - 使用CriteriaBuilder

details

答案 1 :(得分:0)

您应该查询数据库以检查是否存在具有此类名称的员工。然后,您可以根据您的要求继续保存员工