Bu sınıf altta EntityManager nesnesini kullanır. Dolayısıyla " JPA Entity Lifecycle" geçerlidir.
Döndürülen Nesneler
Halen EntityManager'a bağlıdırlar.
Örnek
Not : Bu örnekteki custom metodu anlamak için JpaRepository İle Custom Method yazısına bakabilirsiniz.
Elimizde şöyle bir kod olsun
public interface UserRepository extends JpaRepository<User, Long> {
}Bu kodu şöyle kullanalım. Bu kod 1 noktasında yüklenen nesneyi 2 noktasında değiştiriyor. Daha sonraki noktalarda yapılan save() işlemleri de yan etki olarak 2 noktasındaki kirli nesneyi de kaydediyor.
public void updateUser(int id, String name, int changeReqId){
  User mUser = userRepository.findOne(id); //1
  mUser.setName(name); //2
  ChangeRequest cr = changeRequestRepository.findOne(changeReqId);
  ChangeResponse rs = userWebService.updateDetails(mUser); //3
  if(rs.isAccepted()){
    userRepository.saveAndFlush(mUser); //4
  }
  cr.setResponseCode(rs.getCode());
  changeRequestRepository.saveAndFlush(cr); //this call also saves the changes at step 2
}Düzeltmek için şöyle yaparız. Böylece nesneyi istendiği durumda EntityManager'dan ayırmak mümkün olur.
public interface UserRepositoryCustom {
    ...
   void detachUser(User u);
    ...
}
public interface UserRepository extends JpaRepository<User, Long>, UserRepositoryCustom {
    ...
}
@Repository
public class UserRepositoryCustomImpl implements UserRepositoryCustom {
    ...
    @PersistenceContext
    private EntityManager entityManager;
    @Override
    public void detachUser(User u) {
        entityManager.detach(u);
    }
    ...
} 
Hiç yorum yok:
Yorum Gönder