私はJava Spring MVCプロジェクトに取り組んでいます。コントローラがDAIImplクラスを呼び出すServiceImplクラス(updateAttempt())のメソッドを呼び出すと、更新が行われ、更新されたデータがDBに表示されます。サービスクラス内で呼び出されたときにサービスクラスがデータベースを更新しない
しかしServiceImplクラスに存在するloadUserByUserNameが同じServiceImplクラスのupdateAttempt()メソッドを呼び出すと、エラーまたは例外はスローされませんが、データはDB内で決して更新されません。
PersonController.java
@Controller
@SessionAttributes({ "mob_Number"})
public class PersonController implements Observer, InitializingBean{
private static final Logger logger = LoggerFactory.getLogger(PersonController.class);
private PersonService personService;
@Autowired(required=true)
@Qualifier(value="personService")
public void setPersonService(PersonService ps){
this.personService = ps;
}
public PersonController(PersonService personService){
this.personService = personService;
}
public PersonController(){
}
@RequestMapping(value="/submitVerificationCode",method = RequestMethod.POST, headers = "Accept=application/json")
@ResponseBody
public String submitVerificationCode(@RequestBody String json){
......
this.personService.update_User_Verification_AttemptCount(userVer.getMobile_Number(), no_Attempts);
//this call updates the data in DB
}
}
PersonServiceImpl.java
@Service
public class PersonServiceImpl implements PersonService, UserDetailsService {
private static final Logger logger = LoggerFactory.getLogger(PersonServiceImpl.class);
private PersonDAO personDAO;
private PersonService personService;
public void setPersonDAO(PersonDAO personDAO) {
this.personDAO = personDAO;
}
@Autowired
private Observer observe;
@Override
@Transactional
public void update_User_Verification_AttemptCount(String mobile_number, int count){
this.personDAO.update_User_Verification_AttemptCount(mobile_number, count);
}
@Override
@Transactional
public UserDetails loadUserByUsername(String mobile_Number)
throws UsernameNotFoundException {
this.update_User_Verification_AttemptCount(mobile_Number, no_Attempts); //but this call doesn't update the data in DB
this.getUserDetails() //but this call returns data from DB
}
PersonDAOImpl.java
@Repository
public class PersonDAOImpl implements PersonDAO {
private static final Logger logger = LoggerFactory.getLogger(PersonDAOImpl.class);
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sf){
this.sessionFactory = sf;
}
@Override
public void update_User_Verification_VerCode(String mob_number, String verCode, Timestamp currentTimestamp){
Session session = this.sessionFactory.getCurrentSession();
Query query = session.createQuery("update UserVerification set ver_Code=:verCode, sent_Time=:currentTimestamp where mobile_Number=:mob_Number");
query.setParameter("verCode", verCode);
query.setParameter("currentTimestamp", currentTimestamp);
query.setParameter("mob_Number", mob_number);
query.executeUpdate();
session.flush();
}
}
注:(選択しない)ServiceImplに存在するgetメソッドも値を返しますloadUserByUsernameからgetメソッドが呼び出されたときに正しく呼び出されます。
あなたが 'commit'メソッドを呼び出すことを希望します。 – Vishrant
私はあなたを得ない。 ???の 'Commit'メソッド – user3705478