Java Hibernate HQL استعلامات مع Nolock
سؤال
هل هناك طريقة لتشغيل هذه الاستفسارات كما لو قمت بإضافة تلميح (نولوك)؟
المحلول
إذا كنت بحاجة حقًا إلى هذا ، فأنت تريد أن تفعل شيئًا مثل:
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();
لا تنتمي إلى StackOverflow