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 کار می کنند! 🎯