জেপিএ হিসাবে যেমন @Entity
ক্লাসগুলির ডাটাবেস থেকে পুনরুদ্ধার করার সময় অবজেক্টগুলি ইনস্ট্যান্ট করার জন্য একটি ডিফল্ট (নন-আরগ) কনস্ট্রাক্টর থাকা উচিত।
কোটলিনে, সম্পত্তিগুলি প্রাথমিক কন্সট্রাক্টরের মধ্যে ঘোষণা করতে খুব সুবিধাজনক, যেমন নিম্নলিখিত উদাহরণ হিসাবে:
class Person(val name: String, val age: Int) { /* ... */ }
তবে যখন নন-আরগ কনস্ট্রাক্টরকে মাধ্যমিক হিসাবে ঘোষণা করা হয় তখন এটি প্রাথমিক কন্সট্রাক্টরকে পাস করার জন্য মানগুলির প্রয়োজন হয়, সুতরাং এখানে তাদের মতো কিছু বৈধ মান প্রয়োজন:
@Entity
class Person(val name: String, val age: Int) {
private constructor(): this("", 0)
}
যদি বৈশিষ্ট্যাবলী শুধু চেয়ে কিছু বেশি জটিল টাইপ আছে String
এবং Int
বিশেষ করে যখন প্রাথমিক কন্সট্রাকটর এবং অনেক কোড আছে এটি সম্পূর্ণই তাদের জন্য মান প্রদান খারাপ দেখায় এবং তারা অ nullable করছি, init
ব্লক এবং যখন পরামিতি সক্রিয়ভাবে ব্যবহার করা হয় - - যখন তারা প্রতিবিম্বের মাধ্যমে পুনরায় নিয়োগ দেওয়া হবে তখন বেশিরভাগ কোড আবার কার্যকর করা হবে।
val
তদ্ব্যতীত , নির্মাণকারী নির্বাহের পরে প্রপার্টি পুনরায় নিয়োগ করা যাবে না, তাই অপরিবর্তনীয়তাও হারিয়ে যায়।
সুতরাং প্রশ্নটি হল: কোটলিন কোডটি কীভাবে কোডের সদৃশতা ছাড়াই জেপিএর সাথে কাজ করতে অভিযোজিত হবে, "যাদু" প্রাথমিক মান এবং অপরিবর্তনীয়তা হারাবে?
PS এটি কি সত্য যে হাইপারনেটটি JPA এর পাশে রেখে কোনও ডিফল্ট নির্মাণকারী ছাড়া অবজেক্টগুলি তৈরি করতে পারে?
INFO -- org.hibernate.tuple.PojoInstantiator: HHH000182: No default (no-argument) constructor for class: Test (class must be instantiated by Interceptor)
- সুতরাং, হ্যাঁ, হাইবারনেট ডিফল্ট নির্মাণকারী ছাড়া কাজ করতে পারে।