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