- Katılım
- 12 Mayıs 2020
- Mesajlar
- 1.165
- Çözümler
- 6
interface UserRepository extends CrudRepository<User, Long>
interface ProductRepository extends JpaRepository<Product, String>
@bitwise Hocam repository pattern'in bazi durumlarda anti-pattern oldugu ve gereksiz soyutlamalar ile performans dusurdugu soyleniyor. Buna nasil karar veriyoruz peki? Bu soyutlamalar ciddi anlamda bir performans kaybina sebep olur mu?
@Repository
class UserDAO {
private UserRepository userRepo; // spring repository pattern
private EntityManager entityManager; // JPA entity manager
public complexOperasyon(){
entityManager.hedeHodo() // kompleks isler icin entity
}
public complex2(){
// HQL ile query
return entityManager
.createQuery("FROM User u WHERE u.name = :name", User.class)
}
// Native DB layer query
@Query("select bilmem ne", native=true)
public findAggregateSortBilmemne(){
//
}
}
entityManager
ile session ve transaction yonetimi yapmak durumunda kalmislar. HQL yetmemis Query
ile native query yazmak zorunda kalmislar.interface UserRepo extends JpaRepository<User, ID>
@Transactional(readonly = false, isolation = Serializable,
propagation = Requires.NEW)
public void saveUser(){
// User save islemi yeni bir transaction ve yuksek serializable
// kullanimi gerektirir. Uygulama bu konuda hassas.
// dolayisiyla repo.save islemi transaction yoneten save icine alinmis.
userRepo.save();
}
saveUser
cagirisi yapildiginda transaction icinde transaction icinde transaction gibi sacmaliklara sebep olabiliyor. Bunlarla karsilastim ve debug etmesi inanilmaz kulfetli islemler. Ayrica sadece yuk altinda sacmaladigini gozlemliyorsunuz bazen.transaction
pass etmek cok daha okunabilir, takip edilebilir, abstract hale getirilebilinir.func WithCtx(f func(*sql.Tx) (any, error)) (any, error) {
tx, err := db.BeginTx()
defer rollBack // roll back defer hemen
if err != nil // err handle et
data, err = f(tx) // op
commit
return data, nil // sonuc
}
AbstractTransactionManagerFactoryBean
gibi absurdlesen kullanimlarina ihtiyac kalmiyor.Bu sitenin çalışmasını sağlamak için gerekli çerezleri ve deneyiminizi iyileştirmek için isteğe bağlı çerezleri kullanıyoruz.