我在Spring 4控制器中有一个addEmployee
网络服务,如接受emp_name
和definition
的代码所示。
在调用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;
}
答案 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)
您应该查询数据库以检查是否存在具有此类名称的员工。然后,您可以根据您的要求继续保存员工