Aad*_*dam 4 java hibernate struts2 java-ee
我是hibernate的新手,我正在学习struts2 + hibernate并且已经通过网络上的例子进行了解.在其中一个示例中这里是strts2 + hibernate示例
我可以看到和做的是,用他们的id删除一个用户,正如我们在那里看到的那样,为列表中的每个用户提供了一个删除链接,session.delete()按id删除了记录,现在我想要用户在那里给出的文本字段中输入名称,并且应该能够按名称删除.到目前为止,我尝试过这样的
ActionMethod:
public String delete()
{
//HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get( ServletActionContext.HTTP_REQUEST);
//userDAO.delUser(Long.parseLong( request.getParameter("id")));
userDAO.delUser(user.getName());
return SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
DAOImpl:
@Override
public void delUser(String userName) {
try {
User user = (User) session.get(User.class, userName);
session.delete(user);
} catch (Exception e) {
transaction.rollback();
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
我希望hibernate可以通过提供的任何字段值删除行.以上什么都不做.
问候
为什么不简单地使用JPQL删除查询?这不需要hibernate从DB恢复任何对象到简单删除它.以下是如何在不首先从DB加载的情况下按名称删除用户:
Query query = em.createQuery("delete from User where name=:name");
query.setParameter("name", "Zigi");
int deleted = query.executeUpdate();
System.out.println("Deleted: " + deleted + " user(s)");
Run Code Online (Sandbox Code Playgroud)
Hibernate 遇到的问题是,您无法通过某些属性值获取持久性实例,只能通过id. 如果你想通过userName尝试这个来找到一个实例
public static final String USER_NAME = "userName";
private List<User> findByProperty(String propertyName, Object value) {
log.debug("finding User instance with property: " + propertyName + ", value: " + value);
try {
String queryString = "from User as model where model." + propertyName + "= ?";
Query queryObject = getSession().createQuery(queryString);
queryObject.setParameter(0, value);
return queryObject.list();
} catch (RuntimeException re) {
log.error("find by property name failed", re);
throw re;
}
}
public List<User> findByUserName(Object userName) {
return findByProperty(USER_NAME, userName);
}
@Override
public void deleteUsers(String userName) {
try {
List<User> list = findByUserName(userName);
for (User user: list)
getSession().delete(user);
log.debug("delete successful");
} catch (RuntimeException re) {
log.error("delete failed", re);
throw re;
}
}
Run Code Online (Sandbox Code Playgroud)
这将删除具有给定名称的所有用户,要删除唯一用户,请确保该user_name字段具有唯一约束。可以通过表格上的注释来完成
@Table(name = "user", uniqueConstraints = {
@UniqueConstraint(columnNames = "user_name")
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25794 次 |
| 最近记录: |