gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:53:03 25 4
gpt4 key购买 nike

我在 Spring 4 Controller 中有一个 addEmployee Web 服务,如接受 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
}
}

需要包括以下检查:

正如代码中在设置员工姓名时提到的,我还在该行中添加了 AttributesempInsert.setName(emp_name+"Attributes");因此,可能存在数据库中已存在相同名称的情况,在这种情况下,我想测试无论该名称是否已存在于数据库中,然后仅继续插入。我想知道 hibernate 中有没有一种方法可以帮助我解决这个问题?

如果需要,我的 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;
}

最佳答案

方法:从数据库中进行选择查询,如果不存在,则使用类似“Name%”进行插入

您有 3 个选择:

1-Using Native Query

Session session = sessionFactory.openSession();
session.beginTransaction();
String sql = "select First_Name FROM employee where First_Name like 'NAME%'"
NativeQuery query = session.createNativeQuery(sql);
List<Object[]> list = query.list();
if (list.isEmpty()) {
session.persist(emp);
}

2-Using HQL

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);
}

3-Using CriteriaBuilder

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);
}

关于java - 尝试使用 hibernate 4 测试记录的存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47756903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com