Hibernate 使用和休眠HQL删除
Hibernate不会删除我的行:Hibernate 使用和休眠HQL删除,hibernate,hql,hql-delete,Hibernate,Hql,Hql Delete,Hibernate不会删除我的行: public boolean deleteVote(Login user, int pid){ Session session = getSession(); try{ String hql = "delete from Vote where uid= :uid AND pid= :pid"; Query query = session.createQuery(hql);
public boolean deleteVote(Login user, int pid){
Session session = getSession();
try{
String hql = "delete from Vote where uid= :uid AND pid= :pid";
Query query = session.createQuery(hql);
System.out.println(user.getUid() + " and pid: " + pid);
query.setString("uid", user.getUid());
query.setInteger("pid", pid);
System.out.println(query.executeUpdate());
}catch(Exception e){
输出打印:
uid: 123 and pid: 1
Hibernate: delete from votes where uid=? and pid=?
1
当我直接在SQL中尝试时,SQL语法正在工作。直接SQL语法:
delete from votes where uid= '123' AND pid= 1
映射:
<class name="package.model.Vote" table="votes">
<id name="vid" column="vid" >
<generator class="increment"/>
</id>
<property name="pid" column="pid" />
<property name="uid" column="uid" />
<property name="tid" column="tid" />
<property name="votes" column="votes" />
</class>
我想这很容易,因为到目前为止我觉得一切都很好。我没有得到任何错误或其他任何东西,只是没有删除正在发生
感谢您提供的任何帮助。
uid: 123 and pid: 1
Hibernate: delete from votes where uid=? and pid=?
1
很明显,query.executeUpdate()
返回1。该方法返回
更新或删除的实体数。这意味着1行已被更新或删除,这是正常的
尝试执行
session.flush()
刷新会话,或执行session.execute()
从会话中删除对象。您需要开始并提交事务
Transaction transaction = session.beginTransaction();
try {
// your code
String hql = "delete from Vote where uid= :uid AND pid= :pid";
Query query = session.createQuery(hql);
System.out.println(user.getUid() + " and pid: " + pid);
query.setString("uid", user.getUid());
query.setInteger("pid", pid);
System.out.println(query.executeUpdate());
// your code end
transaction.commit();
} catch (Throwable t) {
transaction.rollback();
throw t;
}
您还可能需要关闭会话才能在数据库中看到更改。使用HQL&session.update的完整java代码
try {
try (Session session = this.sessionFactory.openSession()) {
session.beginTransaction();
String hql = "UPDATE Employee SET " +
"firstName = :firstName, " +
"lastName = :lastName," +
"gender = :gender," +
"jobTitle = :jobTitle," +
"departmentId = :departmentId " +
"where employeeId = :employeeId";
Query query = session.createQuery(hql);
query
.setParameter("employeeId", employee.getEmployeeId())
.setParameter("departmentId", employee.getDepartmentId())
.setParameter("firstName", employee.getFirstName())
.setParameter("lastName", employee.getLastName())
.setParameter("gender", employee.getGender())
.setParameter("jobTitle", employee.getJobTitle())
;
int rows = query.executeUpdate();
// session.update(Objects.requireNonNull(employee));
session.getTransaction().commit();
return session.get(Employee.class, employee.getEmployeeId()).equals(employee);
}
} catch (RuntimeException e) {
e.printStackTrace();
throw e;
}
你怎么知道它没有被删除?您是签入数据库还是在应用程序中执行了另一个查询?直接签入数据库是否为您的应用程序执行插入操作?您是否在某处配置了事务?insert正在工作。我在方法中没有事务。我需要什么//编辑:将完整的方法发布到更清晰的页面。我认为有两件事你可以尝试。一种是将查询中投票的大写字母改为小写(如果您使用的是密钥敏感系统,这可能是问题所在)。您可以尝试的另一件事是在应用程序中执行查询,并在那里检查问题是否是事务。
try {
try (Session session = this.sessionFactory.openSession()) {
session.beginTransaction();
String hql = "UPDATE Employee SET " +
"firstName = :firstName, " +
"lastName = :lastName," +
"gender = :gender," +
"jobTitle = :jobTitle," +
"departmentId = :departmentId " +
"where employeeId = :employeeId";
Query query = session.createQuery(hql);
query
.setParameter("employeeId", employee.getEmployeeId())
.setParameter("departmentId", employee.getDepartmentId())
.setParameter("firstName", employee.getFirstName())
.setParameter("lastName", employee.getLastName())
.setParameter("gender", employee.getGender())
.setParameter("jobTitle", employee.getJobTitle())
;
int rows = query.executeUpdate();
// session.update(Objects.requireNonNull(employee));
session.getTransaction().commit();
return session.get(Employee.class, employee.getEmployeeId()).equals(employee);
}
} catch (RuntimeException e) {
e.printStackTrace();
throw e;
}
int deletedRows = 0;
try {
session = sessionProvider.get();
String hql = "delete from ApprovalRemark approvalRemark where approvalRemark.approvalItem.id =:approvalItemId ";
Query query = session.createQuery(hql);
query.setParameter("approvalItemId", approvalItemId);
deletedRows = query.executeUpdate();
} catch (javax.persistence.NoResultException e) {
return false;
} catch (HibernateException he) {
log.error("deleteAllApprovalRemarksForApprovalItem exception", he);
throw he;
}
log.debug("deleteAllApprovalRemarksForApprovalItem deleted " + deletedRows + " rows");
return true;