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

چطور می توان در play framework، زمانی که از JPA.withTransaction استفاده می کنیم و در زمان Insert به خطاهایی مانند UniqueConstraintViolation برمی خوریم، این خطا را هندل کنیم؟ چون JPA تمام این خطاهارو به RunTimeException می اندازد...

قبل توسط (1.1هزار امتیاز)
چرا از متد JPA.withTransaction استفاده می کنید؟ این متد بیشتر برای تست کاربرد داره.
قبل توسط (15 امتیاز)
ویرایش شده قبل توسط
خب اگه منظورتون استفاده از @Transaction هست که بازم مشکل رو حل نمی کنه. موضوع گرفتن Exception هایی از این دست هست که در ارتباط با دیتابیس بهش برمی خوریم ولی نمیشه Catch کرد. فکر کنید کاربر بخواهد در یک سامانه شماره موبایل تکراری وارد کند و این فیلد در دیتابیش Unique باشد. چطور پیغام اینکه این شماره تکراری است را می توان پس از اینکه در Exception موردنظر افتاد هندل می کنید؟

1 پاسخ

0 امتیاز
قبل توسط (1.1هزار امتیاز)
ویرایش شده قبل توسط

از Play 2.4 استراتژی تیم Play این شده که global state ها مثل همین کلاس JPA از Play حذف بشه و همه چی بر مبنای Dependency Injection جلو بره. global state ها بیشتر کار راه اندازن و برای مواردی که شما می خواهید توضیه می کنیم اگر از Play 2.3 استفاده می کنید، پروژه خود را با Spring یا Guice ستاپ کنید و اگر از Play 2.4 استفاده می کنید از JPAApi استفاده کنید تا کنترل کاملتری بر روی معماری و کامپوننت های پزوژه خود داشته باشید.

برای مثال شما برای تشخیص خطای UniqueConstraintViolation باید یک try catch برای متد persist بگذارید و خطای PersistenceException را catch کنید و بصورت زیر آن را پردازش کنید:

        Task task = new Task();
        task.setTaskTitle("test task");

        try {
            JPA.em().persist(task);
        }catch (PersistenceException e){
            System.out.println("----"+e.getCause().getCause().getMessage());
        }
قبل توسط (95 امتیاز)
پس برمیگرده به فریم ورک Play اصولا از نظر معماری بهتره تا حد ممکن از یک فریم ورک برای IoC و Bean Management استفاده کرد نمیدونم Play تا چه حد این رو مدیریت میکنه یا اصلا موقعیکه در جاوا ازش استفاده میکنیم باید خود Play رو با Spring مدیدیریت کنیم.
نکته دوم در دنیای واقعی پیش میاد حداقل برای Grails به عینه دیدم Scalaرو نمیدونم که تیمی برای صرفه جویی در وقت از کتابخانه ای که توسط تیم دیگری مثلا با JPA نوشته شده مجبور شده استفاده کنه خوب اگه در Scala به همچین کیسی میش بیاد دیگه با توجه به مدیریت پروژه معمار تیم اجازه نمیده او منطق کاری دوباره  با تکنولوژی مثل Slick نوشته بشه یعنی در اسکالا مجبوری از JPA استفاده کنی
سوالم اینجاست که البته بهتره یه این رو در قالب سوال در جواب یاب بگم و این بحث رو اونجا منتقل کنیم
چطور در اسکالا با استفاده از Play میتوان از JPA استفاده کرد؟
سوال دوم چطور میتوان EntityManager رو در Play بدون وابسته شدن به فریم دیگری مثل Spring مدیریت کرد؟
قبل توسط (1.1هزار امتیاز)
هر دو مورد که گفتید به راحتی امکان پذیره و روش کار شده. منم موافقم در قالب سوال در جواب یاب مطرح بشه که بقیه هم روش بحث کنن.

سوالات مشابه

+1 امتیاز
1 پاسخ 438 بازدید
+1 امتیاز
1 پاسخ 549 بازدید
0 امتیاز
1 پاسخ 589 بازدید
0 امتیاز
1 پاسخ 490 بازدید
سوال شده 9 سال قبل در برنامه نویسی توسط ehsolimo (302 امتیاز)
+1 امتیاز
1 پاسخ 454 بازدید
+1 امتیاز
1 پاسخ 513 بازدید
0 امتیاز
0 پاسخ 301 بازدید
...