

لائبريريون ۽ معيار
52. Hibernate ڇا آهي؟ JPA ۽ Hibernate جي وچ ۾ ڇا فرق آهي؟
هن سوال جو جواب ڏيڻ لاء، مان سمجهان ٿو ته اسان کي پهريان سمجهڻ جي ضرورت آهي JPA ڇا آهي. اها هڪ وضاحت آهي جيڪا بيان ڪري ٿي هڪ آبجیکٹ-رابطي واري نقشي سازي جاوا جاوا جي شين جي ۽ هڪ API مهيا ڪري ٿي اهڙين شين کي محفوظ ڪرڻ، ٻيهر حاصل ڪرڻ ۽ هٿ ڪرڻ لاءِ. اھو آھي، لاڳاپو ڊيٽابيس (DBs) ھڪٻئي سان ڳنڍيل جدولن جي ھڪڙي سيٽ جي طور تي پيش ڪيو ويو آھي. ۽ JPA هڪ وڏي پيماني تي منظور ٿيل معيار آهي جيڪو بيان ڪري ٿو ته ڪئين شيون لاڳاپو ڊيٽابيس سان لهه وچڙ ڪري سگهن ٿيون. جئين توهان ڏسي سگهو ٿا، JPA ڪجهه خلاصو ۽ غير معمولي آهي. اهو خود خيال وانگر آهي، انداز.
53. cascading ڇا آهي؟ اهو ڪيئن Hibernate ۾ استعمال ڪيو ويندو آهي؟
جيئن مون اڳ ۾ چيو آهي، Hibernate ۾ ڪميونيڪيشن ڊيٽا جي شين ذريعي ٿئي ٿي جنهن کي ادارو سڏيو وڃي ٿو. اهي ادارا ڊيٽابيس ۾ مخصوص جدولن جي نمائندگي ڪن ٿا، ۽ جيئن توهان کي ياد هوندو، جاوا ڪلاس ٻين طبقن جا حوالا شامل ڪري سگھن ٿا. اهي رشتا ڊيٽابيس ۾ پڻ ظاهر ٿيندا آهن. ضابطي جي طور تي، اهي يا ته پرڏيهي ڪنجيون آهن (OneToOne، OneToMany، ManyToOne رشتن لاءِ) يا وچولي جدول (ManyToMany رشتن لاءِ). جڏهن توهان جي اداري وٽ ٻين لاڳاپيل ادارن جا حوالا آهن، انهن حوالن جي مٿان تشريح رکيا ويندا آهن تعلق جي قسم کي ظاهر ڪرڻ لاءِ: @OneToOne، @OneToMany، @ManyToOne، @ManyToMany. توھان وضاحت ڪري سگھو ٿا cascade جو قسم ھن رشتي لاءِ تشريح جي cascade ملڪيت ۾. JPA وٽ مخصوص طريقا آھن ادارن سان رابطي لاءِ (مسلسل رھڻ، محفوظ ڪرڻ، ضم ڪرڻ...). Cascade قسمن کي ڏيکارڻ لاء استعمال ڪيو ويو آهي ته ڪئين لاڳاپيل ڊيٽا کي ڪيئن عمل ڪرڻ گهرجي؛ اهي طريقا هڪ ٽارگيٽ اداري تي استعمال ٿيندا آهن. پوءِ ڇا آهي cascading حڪمت عمليون (cascade type)؟ JPA معيار ڇهن cascade قسمن جي استعمال لاء مهيا ڪري ٿو:-
PERSIST - محفوظ ڪرڻ جا عمل cascade ۾ ٿين ٿا ( saave() ۽ persist() طريقن لاءِ). ٻين لفظن ۾، جيڪڏهن اسان هڪ اداري کي محفوظ ڪريون ٿا جيڪو ٻين ادارن سان جڙيل آهي، پوء اهي ادارا پڻ ڊيٽابيس ۾ محفوظ ڪيا ويا آهن (جيڪڏهن اهي پهريان ئي موجود نه آهن)
-
MERGE - تازه ڪاري جا عمل هڪ ڪاسڪيڊ ۾ ٿين ٿا ( ضم ڪرڻ () طريقي لاءِ)
-
REMOVE - حذف ڪرڻ جا عمل cascade ۾ ٿين ٿا ( remove() طريقو)
-
سڀ - هڪ ئي وقت ۾ ٽي cascading آپريشن تي مشتمل آهي - PERSIST - ضم ڪريو - هٽايو
-
DETACH - لاڳاپيل ادارا سيشن ( detach() طريقي سان منظم نه ڪيا ويا آهن. اهو آهي، جڏهن لاڳاپيل ادارن جي ڊيٽا کي تبديل ڪيو ويندو آهي، ڊيٽابيس ۾ ڊيٽا خودڪار طور تي اپڊيٽ نه ڪئي وئي آهي - اهي مستقل کان الڳ ٿيل ۾ تبديل ڪيا ويا آهن (يعني ادارو JPA پاران منظم نه آهي)
-
REFRESH - هر دفعي هڪ ادارو تازو ڪيو ويندو آهي ڊيٽابيس مان ڊيٽا سان ( refresh() - ريفريش ٿيل شيون، ان سان لاڳاپيل ادارن کي پڻ تازو ڪيو ويندو آهي. مثال طور، توھان ڪنھن بہ طرح ڊيٽابيس مان ورتل ڊيٽا کي تبديل ڪيو، ۽ توھان اصل قدر بحال ڪرڻ چاھيو ٿا. انهي حالت ۾، توهان هن آپريشن کي مفيد ملندا.

-
replicate - استعمال ڪيو ويو جڏهن اسان وٽ هڪ کان وڌيڪ ڊيٽا جو ذريعو آهي ۽ اسان چاهيون ٿا ته ڊيٽا هم وقت سازي ڪئي وڃي (Hibernate جي نقل ڪرڻ جو طريقو). سڀني ادارن کي سڃاڻپ ڪندڙ (id) هجڻ ضروري آهي انهي کي يقيني بڻائڻ لاءِ ته اهي بغير ڪنهن مسئلن جي ٺاهي سگھجن ٿيون (انهي کي يقيني بڻائڻ لاءِ ته ساڳئي اداري وٽ مختلف ڊيٽابيس لاءِ مختلف آئي ڊي نه آهن)
-
SAVE_UPDATE — cascading save/delete (Hibernate جي saveOrUpdate طريقي لاءِ)
-
LOCK - DETACHED آپريشن جي برعڪس : هڪ الڳ ٿيل اداري کي مستقل حالت ۾ تبديل ڪري ٿو، يعني، موجوده سيشن هڪ ڀيرو ٻيهر اداري کي ٽريڪ ڪندو
54. ڇا اينٽيٽي ڪلاس جو خلاصو ٿي سگهي ٿو؟
جي پي اي وضاحتن جي 2.1 اينٽيٽي ڪلاس جي مطابق ، " ٻئي تجريدي ۽ ڪنڪريٽ طبقن جا ادارا ٿي سگهن ٿا. " تنهن ڪري، جواب ها آهي، هڪ خلاصو طبقو هڪ ادارو ٿي سگهي ٿو ۽ @Entity تشريح سان نشان لڳايو وڃي ٿو.55. هڪ ادارو مينيجر ڇا آهي؟ ان جي ذميواري ڇا آهي؟
سڀ کان پهريان، مان اهو نوٽ ڪرڻ چاهيندس ته EntityManager JPA جو هڪ اهم حصو آهي . اهو ڊيٽابيس سان گڏ ادارن جي رابطي لاءِ استعمال ٿيندو آهي. عام طور تي، ڊيٽابيس سان اداري جي رابطي لاءِ طريقن کي اداري تي سڏيو ويندو آهي (جاري، ضم ڪرڻ، هٽائڻ، الڳ ڪرڻ)... پر مان اهو به نوٽ ڪريان ٿو ته هي جزو عام طور تي پوري ايپليڪيشن لاءِ اڪيلو نه هوندو آهي. اهو اڪثر ٿلهو هوندو آهي، هڪ ڊهي ويندو آهي، ۽ هڪ نئون ٺاهيو ويندو آهي EntityManagerFactory استعمال ڪندي . جيڪڏهن اسان JDBC سان هڪ متوازي ڪڍون ٿا ، جتي EntityManagerFactory DataSource سان هڪجهڙائي آهي ، پوءِ EntityManager ڪنيڪشن جي برابر آهي . اڳ ۾، مون ذڪر ڪيو آهي ته هڪ مستقل ادارو هڪ ادارو آهي جيڪو موجوده ڪنيڪشن ذريعي منظم ڪيو ويندو آهي. هي ادارو EntityManager پاران منظم ڪيو ويندو آهي ، جيڪو موجوده ڪنيڪشن سان ويجھو لاڳاپيل آهي، ۽ TransactionManager ، جيڪو ٽرانزيڪشن کي کولڻ/بند ڪرڻ جو ذميوار آهي. هيٺ ڏنل شڪل ۾، توهان ڏسي سگهو ٿا اداري جي زندگيءَ جو چڪر:
56. Assert ڪلاس ڇا آهي؟ اهو ڇو استعمال ڪيو ويو آهي؟
مون JPA ۾ اهڙي ڪلاس بابت نه ٻڌو آهي ، تنهن ڪري مان سمجهان ٿو ته اهو سوال JUnit لائبريري ۾ مليل هڪ طبقي ڏانهن اشارو ڪري ٿو جيڪو يونٽ ٽيسٽ لاء استعمال ڪيو ويندو آهي. هن لائبريري ۾، Assert ڪلاس استعمال ڪيو ويندو آهي ڪوڊ جي عملدرآمد جا نتيجا چيڪ ڪرڻ لاءِ (هتي assert جو مطلب اهو آهي ته توهان وٽ مخصوص رياست/ڊيٽا آهي ڪوڊ ۾ مخصوص هنڌ تي). مثال طور، اچو ته چئو ته توهان هڪ طريقي جي جانچ ڪري رهيا آهيو جيڪا هڪ ٻلي ٺاهي وئي آهي. توھان طريقي سان ھلندا آھيو ۽ توھان ڪجھھ نتيجا حاصل ڪندا آھيو:Cat resultOfTest = createCat();
پر توهان کي پڪ ڪرڻ جي ضرورت آهي ته اهو صحيح طور تي ٺاهيو ويو، صحيح؟ تنهن ڪري توهان دستي طور تي هڪ مخصوص ٻلي ( expectedCat ) ٺاهيندا آهيو بلڪل انهن پيرا ميٽرن سان جيڪي توهان کي ڏسڻ جي اميد رکو ٿا cat() طريقي مان حاصل ڪيل ٻلي ۾ . پوءِ توھان استعمال ڪريو Assert class نتيجن جي تصديق ڪرڻ لاءِ:
Assert.assertEquals(resultOfTest, expectedCat);
جيڪڏهن ٻڪريون مختلف آهن، ته پوء هڪ AssertionError اڇلايو ويندو، جيڪو اسان کي ٻڌائي ٿو ته اسان متوقع نتيجا حاصل نه ڪيو. Assert ڪلاس ۾ ڪيترائي مختلف طريقا آھن جيڪي مختلف عملن کي ڍڪيندا آھن متوقع نتيجن جي تصديق ڪرڻ ۾ مددگار . هتي انهن مان ڪجهه آهن:
-
assertTrue(<boolean>) - هڪ دليل جي طور تي منظور ڪيل قدر صحيح ٿيڻ جي توقع ڪئي وئي آهي
-
assertFalse(<boolean>) - هڪ دليل جي طور تي منظور ٿيل قدر غلط هجڻ جي توقع ڪئي وئي آهي
-
assertNotEquals(<object1>, <object2>) - دليلن جي طور تي منظور ڪيل شيون مختلف هجڻ گهرجن جڏهن برابر استعمال ڪرڻ جي مقابلي ۾ ( غلط )
-
assertThrows(<ClassNameOfException>.class, <exceptionObject>) - ٻئي دليل جي توقع ڪئي ويندي آھي ھڪڙي استثناءَ جو پھرين دليل طرفان اڇلايو ويندو آھي (يعني ٻيو دليل عام طور تي ھڪڙو طريقو ڪال آھي جيڪو گھربل قسم جي استثنا کي اڇلائڻ گھرجي)
تار
57. Java's String class بيان ڪريو
اسٽرنگ ھڪڙو معياري جاوا ڪلاس آھي جيڪو اسٽرنگ ويلز (ڪردارن جي تسلسل) کي محفوظ ڪرڻ ۽ ھڙپ ڪرڻ جو ذميوار آھي. اهو هڪ غير مٽائيندڙ ڪلاس آهي (مون اڳ ۾ هتي لکيو آهي immutable )، يعني، هن طبقي جي شين جي ڊيٽا انهن جي ٺهڻ کان پوءِ تبديل نه ٿي ڪري سگهجي. مان فوري طور تي نوٽ ڪرڻ چاهيان ٿو ته StringBuilder ۽ StringBuffer ڪلاس بنيادي طور تي هڪجهڙا آهن - فرق صرف اهو آهي ته انهن مان هڪ جو مقصد هڪ گھڻائي واري ماحول ۾ استعمال لاءِ آهي ( StringBuffer ). اهي طبقا String وانگر آهن ، پر ان ۾ فرق آهي ته اهي ميوٽيڪل آهن . جيتوڻيڪ اھي ٺھيل آھن، اھي توھان کي تبديل ڪرڻ جي اجازت ڏين ٿا جيڪي اھي ظاھر ڪن ٿا، ھڪڙو نئون اعتراض ٺاھڻ کان سواء. انهن جا طريقا معياري اسٽرنگ طريقن کان مختلف آهن ۽ اسٽرنگ مينيپوليشن لاءِ ٺهيل آهن (اتي هڪ سبب آهي ته اهي ان کي بلڊر سڏين ٿا).58. String اعتراض ٺاهڻ جا ڪهڙا طريقا آهن؟ اهو ڪٿي پيدا ٿيو آهي؟
هڪ اسٽرنگ ٺاهڻ جو سڀ کان عام طريقو اهو آهي ته اها قيمت بيان ڪرڻ آهي جيڪا اسان چاهيون ٿا ڊبل اقتباس جي نشانين ۾:String str = "Hello World!";
توهان اهو پڻ ڪري سگهو ٿا واضح طور تي نئين استعمال ڪندي :
String str = new String("Hello World!");
توھان پڻ اکرن جي صف مان ھڪڙو تار ٺاھي سگھو ٿا:
char[] charArr = {'H','e','l','l','o',' ', 'W','o','r','l','d','!'};
String str = new String(charArr);
اسان ان کي ڪال ڪري سگھون ٿا toString طريقي سان ڪجھ اعتراض تي:
String str = someObject.toString();
اسان اهو ڪري سگهون ٿا ڪنهن ٻئي طريقي سان سڏين ٿا جيڪو هڪ تار واپس ڪري ٿو. مثال:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String str = reader.readLine();
توهان سمجھو ٿا ته تار ٺاهڻ جا ڪيترائي، ڪيترائي طريقا ٿي سگهن ٿا. جڏهن هڪ اسٽرنگ اعتراض ٺاهيو ويندو آهي، اهو هڪ اسٽرنگ پول ۾ محفوظ ڪيو ويندو آهي ، جنهن تي اسان هيٺ ڏنل سوالن مان هڪ ۾ وڌيڪ تفصيل سان بحث ڪنداسين.
59. توهان ٻن جاوا تارن جو مقابلو ڪيئن ٿا ڪريو، ۽ توهان انهن کي ڪيئن ترتيب ڏيو ٿا؟
جاوا استعمال ڪري ٿو ڊبل برابر نشاني ( == ) مقابلي ڪرڻ لاءِ. جيڪڏھن اسان کي ضرورت آھي سادو قدرن جو مقابلو ڪرڻ جھڙوڪ ints، اسان ان کي استعمال ڪنداسين. پر هي طريقو مڪمل شين جي مقابلي لاء مناسب ناهي. اهو صرف حوالن جو مقابلو ڪندو، يعني ته حوالا ساڳئي اعتراض ڏانهن اشارو ڪن ٿا يا نه. هن جو مطلب اهو آهي ته جيڪڏهن اسان ٻن شين کي ساڳي فيلڊ جي قيمتن سان موازنہ ڪريو == استعمال ڪندي، اسان کي غلط حاصل ڪنداسين . شعبن ۾ ساڳيا قدر آهن، پر شيون پاڻ کي ياداشت ۾ مختلف هنڌن تي قبضو ڪن ٿا. اسٽرنگ شيون، انهن جي فريب واري سادگي جي باوجود، اڃا تائين شيون آهن. انهن جي مقابلي ڪرڻ == استعمال ڪرڻ پڻ مناسب ناهي (هڪ اسٽرنگ پول جي موجودگي جي باوجود). مناسب حل آهي آبجیکٹ ڪلاس جي معياري برابري جو طريقو، جنهن کي صحيح طريقي سان ڪم ڪرڻ لاءِ اوور رائڊ ڪرڻ جي ضرورت آهي (ڊفالٽ طور، اهو استعمال ڪري ٿو == مقابلي لاءِ). اسٽرنگ ڪلاس ان کي ختم ڪري ٿو، تنهنڪري اسان صرف ان جي عمل کي استعمال ڪندا آهيون :String firstStr = "Hello World!";
String secondStr = "Hello World!";
boolean isEquals = firstStr.equals(secondStr);

TreeSet<String> sortedSet = new TreeSet<>();
sortedSet.add("B");
sortedSet.add("C");
sortedSet.add("A");
sortedSet.forEach(System.out::println);
ڪنسول آئوٽ:
60. هڪ اسٽرنگ کي اکرن ۾ تبديل ڪرڻ لاءِ هڪ الگورٿم مهيا ڪريو. لاڳاپيل ڪوڊ لکو
جيئن مون اڳ ۾ چيو آهي، String شين جا ڪيترائي مختلف مفيد طريقا آهن. انهن مان هڪ آهي toCharArray . هي طريقو هڪ اسٽرنگ کي ڪردار جي صف ۾ تبديل ڪري ٿو:String str = "Hello world";
char[] charArr = str.toCharArray();
اڳيون، اسان وٽ اکرن جو ھڪڙو سلسلو آھي جنھن کي اسين اشارو ڪري سگھون ٿا:
char firstChar = charArr[0]; // H
61. توهان هڪ اسٽرنگ کي بائيٽ ايري ۽ واپس ۾ ڪيئن تبديل ڪندا آهيو؟ لاڳاپيل ڪوڊ لکو
اسٽرنگ ڪلاس ۾ هڪ getBytes طريقو آهي، جيڪو toCharArray طريقي سان ملندڙ جلندڙ آهي ۽ اسٽرنگ کي بائيٽ ايري طور واپس ڪري ٿو :String str = "Hello world";
byte[] byteArr = str.getBytes();
byte firstChar = byteArr[6]; // 119
اسان اڄ اسان جي نظرثاني جي منطقي نتيجي تي آيا آهيون. پڙهڻ لاءِ مهرباني!
GO TO FULL VERSION