【问题标题】:update mysql table with hibernate showing error用hibernate更新mysql表显示错误
【发布时间】:2015-10-25 02:44:57
【问题描述】:

在我的 Spring 项目中,我想根据 url 更新 mysql 表字段:

我有以下网址:

localhost:9191/access/name/article?key=xyz

我想从url获取文章,然后更新对应mysql表的状态和文章字段

在我的数据库中,我的表名是“user”。

user(stu_id,name,email,article,status)

mysql查询是:

UPDATE user
SET article='null', status=true
WHERE article='xyz';  here xyz=user.getArticle()

为了实现这一点,我已经完成了以下操作

User.java 是:

public User(String article, String status) {
        super();
        this.article = article;
        this.status = status;
    }

UserDao.java

public interface UserDao {


     public void updateUser(User user);

}

UserDaoImpl.java 是:

@Transactional
@Repository("userDao")
public class UserDaoImpl implements UserDao {
@Autowired
    private SessionFactory sessionFactory;

public void updateUser(User user) {


        String hql = "update user set article = null,status=true" 
                +"where article=:key1";

        sessionFactory.getCurrentSession().createQuery(hql)
        .setParameter("key1", user.getArticle());
        }
    }

UserService.java 是:

public interface UserService {

    User updateUser(String article, String status);

}

UserServiceImpl.java 是:

@Service("userService")
@Transactional(propagation = Propagation.SUPPORTS)
public class UserServiceImpl implements UserService {

public User updateUser(String article, String status) {


        User user = new User(article,status);


        userDao.updateUser(user);

        return user;

return user;
}

UserController.java 是:

//localhost:9191/access/name/article?key=xyz 

@RequestMapping(value="/access/name/id", method=RequestMethod.GET)
public @ResponseBody String byParameter( User user, HttpServletRequest request) {

        boolean ps=true;
        String foo= request.getParameter("key");

        userService.updateUserinfo(foo, ps);


        return "signupLogin";
    }

但它显示错误:

ERROR [] (ErrorCounter.java:56) - line 1:51: unexpected token: key
ERROR [] (ErrorCounter.java:56) - line 1:58: unexpected token: =

java.lang.IllegalArgumentException:要遍历的节点不能为空!

at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1760)
    at com.student.dao.UserDaoImpl.updateUser(UserDaoImpl.java:40)
    at com.student.service.UserServiceImpl.updateUserinfo(UserServiceImpl.java:66)

问题出在哪里?我做错了什么?

【问题讨论】:

    标签: java mysql spring hibernate hql


    【解决方案1】:
      at com.student.dao.UserDaoImpl.updateUser(UserDaoImpl.java:40)
    

    您执行了错误的查询。您应该执行以下代码:

    @Transactional
    @Repository("userDao")
    public class UserDaoImpl implements UserDao {
    @Autowired
        private SessionFactory sessionFactory;
    
    public void updateUser(User user) {
    
    
            String hql = "update user set article = null,status=true" 
                    +"where article=:key1";
    
            sessionFactory.getCurrentSession().createSQLQuery(hql)
            .setParameter("key1", user.getArticle());
            }
        }
    

    语法如下: 其中 user(这是数据库表)和 article,status 是字段

    【讨论】:

      【解决方案2】:

      对sql查询进行以下更正,使用User代替user进入查询。

      String hql = "update User set article = null, status = true where article = :key1";
      

      如果您不想更改此方法,则可以使用createSqlQuery 方法代替createQuery 方法。

      这个解决方案可能会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-05-10
        • 2010-11-23
        • 1970-01-01
        • 2012-12-17
        • 1970-01-01
        • 1970-01-01
        • 2019-03-15
        相关资源
        最近更新 更多