كيف JPA (السبات) التعامل مع المعاملات عند إحضار كائن من قاعدة بيانات

StackOverflow https://stackoverflow.com/questions/245723

سؤال

وأنا DEVELOPPING حاليا تطبيق في جافا باستخدام السبات كمدير المثابرة وJPA كاستخراج من استمرار إدارة السبات.

وأود أن أعرف تأثير التفاف استعلام نتيجة حول الصفقة. وأنا أعلم أن مدير كيان يجب أن تبقى مفتوحة لعلة الحقل المنال بتكاسل ماذا عن معاملة في كل هذا؟

وهنا مثال الرمز مع القدرة الصفقة تفعيل / desactivation.

public List<Exportdata> get(Integer max, EntityManager em, Boolean withTransaction) {
    EntityTransaction tx = null;
    try {
        if (withTransaction) {
            tx = em.getTransaction();
            tx.begin();
        }

        Query query = em.createQuery("from Exportdata");
        query.setMaxResults(10);
        List<Exportdata> list = query.getResultList();

        if (withTransaction)
            tx.commit();

        return list;
    } catch (RuntimeException re) {
        if (withTransaction)
            if (tx != null && tx.isActive())
                tx.rollback();

        throw re;
    }
}

ما هو الفرق بين تمكين أو تعطيل withTransaction عندما يتم استدعاء هذه الوظيفة؟

وبفضل كل شيء، فريد

هل كانت مفيدة؟

المحلول

وليس هناك فرق عملي هنا، منذ كنت لا تغيير أي من البيانات. سوف الاستعلام تقوم بتنفيذ توليد SQL اختر. المعاملات هناك لتسمح لك لتطبيق خصائص ACID إلى مجموعة من الملاحق والتحديثات، وما إلى ذلك.

ولكن ، إذا بدأت التلاعب الكائنات في قائمة عاد من هذه الطريقة، داعيا اضعي، وما إلى ذلك سوف يتم نشر تلك التغييرات مرة أخرى إلى قاعدة البيانات خارج مع المعاملة على مخصصة أساس. وبعبارة أخرى عليك بشكل فعال العمل مع ديسيبل في وضع الالتزام التلقائي. هذا من غير المرجح أن تكون ما تريد.

والشيء المهم هو أن نفهم أن مدة سياق استمرار والمعاملات يمكن أن تدار بشكل منفصل. في كثير من الأحيان على الرغم من أن تريد إدارتها معا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top