مولد معرف السبات الصحيح للعمود المسلسل/BigSerial Postgres؟
-
26-09-2019 - |
سؤال
تحتوي جداول postgresql الخاصة بي على معرف من النوع bigserial
, ، بمعنى أنه يتم توليدها في صفوف الوقت يتم إدخالها (وبالتالي ، لا يتم توفير قيمة عمود المعرف في INSERT
بيان). أواجه صعوبة في العثور على القيمة المناسبة ل <generator class="...">
سمة في ملف تعيين XML الخاص بي.
الرمز أدناه هو الأقرب الذي وجدته يبدو أنه الأقرب إلى Postgres ، لكنه لا يزال يؤدي SELECT nextval(...)
على التسلسل قبل الإدراج (وإدراج قيمة حقل المعرف بشكل صريح على الإدراج). أريد فقط أن لا تتضمن Hibernate قيمة حقل المعرف على الإطلاق ، مما يسمح لـ Postgres بالقيام بعملها في توليد القيمة نفسها.
<id name="id" column="id" type="java.lang.Long">
<generator class="sequence">
<param name="sequence">my_sequence_name</param>
</generator>
</id>
نصائح أخرى
من ما قرأته:
<id name="id" column="id" type="java.lang.Long">
<generator class="sequence">
<param name="sequence">my_sequence_name</param>
</generator>
</id>
يجب أن تعمل أسرع من:
<id name="id" column="id" type="java.lang.Long">
<generator class="identity" />
</id>
يندرج مولد التسلسل في المولدات poid غير الإضافية موصوف مثل هذا:
المولدات poid غير الإضافية هي الخيار الأفضل للتطبيقات الجديدة. تسمح هذه المولدات Nhibernate بتعيين هوية لكائن ثابت دون كتابة بيانات الكائن إلى thedatabase ، مما يسمح لـ Nhibernate بتأخير الكتابة حتى تكتمل المعاملة التجارية ، مما يقلل من رحلات مستديرة إلى قاعدة البيانات.
في حين أن مولد الهوية المولدات poid بعد الإدخال مجموعة:
تتطلب المولدات PoID بعد الإدخال أن تستمر البيانات في قاعدة البيانات لإنشاء معرف. هذا يغير سلوك nhibernate بطرق خفية للغاية ويؤدي إلى تعطيل بعض ميزات الأداء. على هذا النحو ، فإن استخدام هذه المولدات poid محبط بشدة! يجب استخدامها فقط مع قواعد البيانات الحالية حيث تعتمد تطبيقات أخرى على هذا السلوك.
تم أخذ اقتباسات من كتاب طبخ Nhibernate 3.0.
حاول المتابعة وعملت:
<id name="id" column="id" type="long" unsaved-value="null" >
<generator class="sequence">
<param name="sequence">my_sequence_name</param>
</generator>
</id>