+1 امتیاز
قبل در برنامه نویسی توسط (1.1هزار امتیاز)

در زمان استفاده از JPA در یک کلاس غیر کنترلر در Play Framework، پیغام خطای زیر را دریافت می کنم:

No EntityManager bound to this thread. Try wrapping this call in JPA.withTransaction

حتی وقتی بالای متد انوتیشن Transactional را نیز می گذارم باز هم این مشکل وجود دارد.

2 پاسخ

0 امتیاز
قبل توسط (1.1هزار امتیاز)
 
بهترین پاسخ

تنظیمات پیش فرض Play Framework در زمان استفاده از زبان برنامه نویسی جاوا و JPA بدین صورت است که فقط در کنترلر هایی که با انوتیشن @Transactional مشخص شده اند JPA Transaction وجود دارد و در سایر کلاس ها خطای No EntityManager bound to this thread بوجود می آید.

برای رفع این مشکل باید با استفاده از متد استاتیک withTransaction از کلاس JPA یک Transaction جدید ایجاد کرد:

    public YourResult getResult(String someStr) throws Throwable {
        return JPA.withTransaction(() -> (YourResult) JPA.em()
                .createNamedQuery(NAMED_QUERY_GET_RESULT).setParameter(1, str)
                .getSingleResult());
    }
0 امتیاز
قبل توسط (2.2هزار امتیاز)

خیلی اتفاقی رسیدم به اینجا  smiley

سوالات مشابه

+1 امتیاز
1 پاسخ 1.2هزار بازدید
+1 امتیاز
1 پاسخ 549 بازدید
0 امتیاز
1 پاسخ 378 بازدید
+1 امتیاز
1 پاسخ 436 بازدید
+1 امتیاز
1 پاسخ 1.1هزار بازدید
سوال شده 5 سال قبل در برنامه نویسی توسط masoud shahhosseini_ (45 امتیاز)
0 امتیاز
0 پاسخ 408 بازدید
سوال شده 9 سال قبل در برنامه نویسی توسط bahrambb (308 امتیاز)
+1 امتیاز
1 پاسخ 453 بازدید
+1 امتیاز
1 پاسخ 512 بازدید
...