EntityManager E Spring Data JPA

EntityManager ، persistencontext etransactional بدون داده های بهاری JPA
هیچ داده های بهاری JPA، ای EntityManager، حاشیه نویسی @PersistenceContext اشمیه @Transactional آنها با هم همکاری می کنند تا عملیات پایداری را به طور کارآمد و ایمن مدیریت کنند. بیایید هر یک از این مؤلفه ها و نحوه ارتباط آنها را درک کنیم.
1⃣ EntityManager: این چیست و از کجا آمده است؟
ای EntityManager این رابط اصلی است API پایداری جاکارتا (JPA) برای مدیریت چرخه زندگی نهادها و تعامل با پایگاه داده. این امکان را برای عملیاتی مانند پایداری ، حذف و مشاوره فراهم می کند.
📌 مبداء EntityManager:
- ای
EntityManagerاز مشخصات می آید JPA و این فقط یک است رابطبشر - اجرای بتن آن به این بستگی دارد ارائه دهنده JPA پیکربندی شده در پروژه (مانند Hibernate ، Eclipselink یا OpenJPA).
- هیچ چکمه بهاری، Hibernate ارائه دهنده استاندارد است.
📌 گزیده ای از رابط JPA (EntityManager):
package jakarta.persistence;
public interface EntityManager {
void persist(Object entity);
<T> T merge(T entity);
void remove(Object entity);
<T> T find(Class<T> entityClass, Object primaryKey);
Query createQuery(String qlString);
void close();
}
🔹 همانطور که فقط یک رابط است ، زمستان اجرای بتن را فراهم می کند.
1.1 اجرای EntityManager بدون خواب زمستانی
اگر Hibernate ارائه دهنده JPA باشد ، اجرای واقعی EntityManager این کلاس خواهد بود org.hibernate.internal.SessionImplبشر
📌 کلاس واقعی Hibernate (SessionImpl):
package org.hibernate.internal;
import jakarta.persistence.EntityManager;
public class SessionImpl implements EntityManager {
public void persist(Object entity) {
// Implementação do persist no Hibernate
}
public <T> T merge(T entity) {
// Implementação do merge no Hibernate
}
public void remove(Object entity) {
// Implementação do remove no Hibernate
}
public void close() {
// Implementação do close no Hibernate
}
}
🔹 o Hibernate USA
SessionImplاجرایEntityManagerبشر
1.2 با به دست آوردن بهار ، اجرای EntityManager؟
ای چکمه بهاری به طور خودکار پیکربندی می کند EntityManagerFactory، که مواردی از EntityManagerبشر
📌 جریان ایجاد EntityManager بدون چشمه:
JPA (Jakarta Persistence API)
↓
EntityManager (Interface)
↓
Provider JPA (Ex: Hibernate)
↓
Hibernate Session (Implementação real)
↓
Spring Boot cria EntityManagerFactory automaticamente
↓
EntityManager injetado nos Beans com @PersistenceContext
🔹 بهار به طور خودکار چرخه زندگی را مدیریت می کند
EntityManagerبشر
2⃣ persystencontext: تزریق EntityManager در بهار
ای بهار به طور خودکار یک EntityManager از طریق حاشیه نویسی توسط کانتینر اداره می شود @PersistenceContextبشر
📌 از مثال استفاده کنید:
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.springframework.stereotype.Repository;
@Repository
public class AutorRepositoryCustom {
@PersistenceContext
private EntityManager entityManager;
public void salvar(Autor autor) {
entityManager.persist(autor);
}
}
🔹 o تزریق بهار
EntityManagerبطور خودکار، و در چارچوب معامله اداره می شود.
3 ⃣ transactional: اطمینان از سازگاری عملیات
حاشیه نویسی @Transactional معاملات را به صورت خودکار مدیریت می کند. در داده های بهار JPA ، این عملیات را تضمین می کند در یک معامله واحد اجرا شدبشر
3.1 چگونه @Transactional؟
وقتی روشی که با آن ذکر شد @Transactional به آن گفته می شود:
- بهار معامله ای را باز می کند مجموعه پایگاه دادهبشر
- ای
EntityManagerاین با معامله همراه است و می تواند عملیات را انجام دهد. - روش نهایی نیست:
- اگر خطایی وجود نداشته باشد ، بهار مرتکب می شود معامله
- اگر یک استثنا رخ دهد ، بازگشت بهار فاز به طور خودکار
📌 مثال استفاده از @Transactional:
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class AutorService {
@PersistenceContext
private EntityManager entityManager;
@Transactional
public void criarAutor(Autor autor) {
entityManager.persist(autor);
}
}
🔹 بهار وقتی معامله را باز می کند
criarAutorدر پایان خوانده می شود و بسته می شود.
3.2 تنظیمات پیشرفته @Transactional
حاشیه نویسی @Transactional گزینه های مختلفی برای سفارشی کردن رفتار معامله دارد:
| ویژگی | شرح |
|---|---|
readOnly = true |
نمایش داده ها را بهینه می کند ، و از روش اطمینان می دهد تغییراتی ایجاد نمی کندبشر |
propagation |
اگر دیگری در حال حاضر وجود داشته باشد ، نحوه رفتار معامله را مشخص می کند. |
isolation |
سطح عایق (کنترل رقابت) را تعریف می کند. |
rollbackFor |
مشخص می کند که کدام استثناء باید باعث بازگشت مجدد شود. |
noRollbackFor |
استثنائاتی را تعریف می کند که هیچ باید باعث بازگشت مجدد شود. |
📌 نمونه ای از استفاده پیشرفته:
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED, rollbackFor = Exception.class)
public void processarTransacao() {
// Operação no banco de dados
}
🔹 روش همیشه در یک معامله اجرا کنید اشمیه بازگرداندن به هر استثنا
4⃣ مثال کامل: مخزن ، خدمات و معاملات
📌 ایجاد یک مخزن سفارشی با EntityManager
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.springframework.stereotype.Repository;
@Repository
public class AutorRepositoryCustom {
@PersistenceContext
private EntityManager entityManager;
public Autor buscarPorId(Long id) {
return entityManager.find(Autor.class, id);
}
public void salvar(Autor autor) {
entityManager.persist(autor);
}
}
📌 ایجاد یک سرویس با @Transactional
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class AutorService {
private final AutorRepositoryCustom autorRepository;
public AutorService(AutorRepositoryCustom autorRepository) {
this.autorRepository = autorRepository;
}
@Transactional
public void registrarAutor(Autor autor) {
autorRepository.salvar(autor);
}
}
🔹 معامله با روش شروع می شود
registrarAutorدر پایان فراخوانی می شود و بسته می شودبشر
پایان
✔ EntityManager بیا از JPA و توسط stityManagerFective بدون بوت بهار.
✔ @PersistenceContext تزریق EntityManager به طور خودکار
✔ @Transactional تضمین می کند که عملیات در یک معامله اتفاق می افتد.
✔ نه چکمه بهاری، این تنظیمات اتوماتیک هستند ، اما می توانند سفارشی شوند.
🚀 حالا شما می فهمید که چگونه EntityManagerبا @PersistenceContext اشمیه @Transactional آنها روی داده های بهار JPA کار می کنند! 🎯



