سؤال

هل هناك طريقة لتشغيل هذه الاستفسارات كما لو قمت بإضافة تلميح (نولوك)؟

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

المحلول

إذا كنت بحاجة حقًا إلى هذا ، فأنت تريد أن تفعل شيئًا مثل:

session.connection().setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);

وهو مطابق لنولوك.

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

في الحقيقة، هذا الموضوع يذهب إلى القضايا قليلا. اقرأ بعناية قبل اتخاذ قرار.

نصائح أخرى

في أحدث إصدار من Hibernate ، عليك القيام بذلك بهذه الطريقة:

  Session session = (Session) em.getDelegate();
        session.doWork(new Work() {
            @Override
            public void execute(Connection connection) throws SQLException {
                connection.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
            }
        });

يمكنك القيام بـ "مع (نولوك)" إذا ذهبت إلى الأم. هذا أمر متطرف ولكن إذا كان البديل يغير مستوى عزل المعاملة ، فقد تفضل القيام بذلك.

لاحظ أن هذا المثال مخصص لـ MSSQL.

String sqlQueryString = "SELECT * FROM my_classes_table WITH (nolock) WHERE columnName = :columnValue";

SQLQuery sqlQuery= session.createSQLQuery(sqlQueryString).addEntity(MyClass.class);
sqlQuery.setLong("columnValue", value);
List<MyClass> out = sqlQuery.list();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top