وقتی از Hibernate استفاده میکنیم میتوانیم از Named Parameter برای بالا بردن میزان اطمینان در ارسال اطلاعات SQL query ها استفاده کنیم اما ممکن است هنگام کار با این پارامتر ها با دو خطای متداول که یکی برای موقعی که بتنهایی از Hibernate استفاده میکنیم و دیگری hibernate پیاده سازی شده JPA بر بخوریم
آن دو خطا رایج عبارت است از :
- Not all named parameters have been set
- Named parameter not bound
اگر چه در ظاهر خطا های متفاوتی هستند ولی علت رخ دادن آنها یکی است
چه چیزی باعث میشود این خطا ها رخ دهند :
قبل از اجرای کوئری های دارای Named Parameter ما مقادیری را به این Named Parameter ها نسبت میدهیم و بعد کوئری اجرا میشود
Query<Event> query = session.createQuery("from Event E WHERE E.title = :eventTitle", Event.class);
در این مثال ما یک Named Parameter بنام eventTitle داریم که هایبرنیت میخواهد آنرا با مقداری پر کند و اگر ما آن مقدار را مشخص نکرده باشیم پیام Not all named parameters have been set از خطای org.hibernate.QueryException را میتوانیم مشاهده کنیم
برای جلوگیری از رخ دادن این خطا ما میتوانیم مقادیر را با استفاده از متد setParameter به کوئری هایبرنیت اضافه کنیم :
Query<Event> query = session.createQuery("from Event E WHERE E.title = :eventTitle", Event.class); query.setParameter("eventTitle", "Event 1"); assertEquals(1, query.list().size());