2015-08-03 4 views
1

В моей Спринг проекте я хочу, чтобы обновить поле MySQL таблицы в соответствии с URL:обновления MySQL таблица с Hibernate показывая ошибку

У меня есть URL ниже:

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

Я хочу, чтобы извлечь статью из URL а затем обновить поле состояния и статьи сопоставимой таблицы mysql

В моей базе данных у меня есть имя таблицы «пользователь».

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) 

В чем проблема? Что я делаю неправильно?

ответ

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

синтаксиса как: где пользователем (это таблица базы данных) и статьи, статусом являются полями

+0

фантастического кода .. – Salini

1

Внесите следующую поправку в запрос sql User вместо user в запрос.

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

, если вы не хотите, чтобы изменить этот метод, то вы можете использовать метод createSqlQuery вместо createQuery метода.

Это решение может быть полезным.

Смежные вопросы