الحصول على اسم الحقل والجدول الذي تسبب استثناء من كائن SQL استثناء

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

سؤال

وأنا باستخدام السبات النقابة والربيع في مشروعي. لنفترض إذا حاولت إدراج سجل مع قيمة المفتاح مكررة، سوف الاستعلام إدراج بطرح استثناء.

والآن، هل من الممكن الحصول على اسم الجدول، اسم الحقل والسبب المحتمل للاستثناء من وجوه SQL استثناء في وقت التشغيل!؟

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

المحلول

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

وعلى سبيل المثال إذا كنت في محاولة لوضع كبيرة جدا قيمة في عمود يمكنك استخدام هذا:

try {
    entityManager.persist(object);

} catch (InvalidStateException e) {

    log.info("Caught Hibernate exception: #0", e.getClass().getName());

    InvalidValue[] invalidValues = e.getInvalidValues();

    for(InvalidValue invalidValue : invalidValues) {
        log.info("Invalid Property #0 has value: #1", invalidValue.getPropertyName(), invalidValue.getPropertyName());
    }
}

نصائح أخرى

وSQLExceptions تميل إلى التفاف حتى مجرد أخطاء قاعدة البيانات، يمكنك فقط الحصول على هذا النوع من المعلومات إذا أدرج في الخطأ الذي ألقى قاعدة البيانات الخاصة بك. في تجربتي من السبات التصحيح وJDBC الاشياء، وأود أن الخطر أن الجواب على هذا السؤال هو عموما "لا"، ولكن قد تكون هناك استثناءات.

والسبات يلتف SQLException كما JDBCException ويحاول تحويله إلى أكثر يعني استثناء الكامل مثل ConstraintViolationException باستخدام SQLExceptionConverter وهو يعلق على SessionFactory.

SQLException sqlException = ((JDBCException)ex).getSQLException(); 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top