मुझे लगता है कि पेटार से स्वीकृत उत्तर सही नहीं है, या अब सही नहीं है। Postgres में स्वतः-वृद्धि को SERIAL
. के माध्यम से नियंत्रित किया जाता है छद्म प्रकार, यह सही है। हालांकि, पेटार द्वारा दी गई मैपिंग के परिणामस्वरूप हाइबरनेट 5.1 द्वारा उत्पन्न निम्नलिखित डीडीएल होगा:
CREATE SEQUENCE users_id_seq START 1 INCREMENT 50;
CREATE TABLE … (
id INT8 NOT NULL,
…
);
यह SERIAL
का उपयोग नहीं कर रहा है , लेकिन एक हाइबरनेट प्रबंधित अनुक्रम। यह तालिका के स्वामित्व में नहीं है और कोई डिफ़ॉल्ट मान सेट नहीं किया गया है। बेशक, डीडीएल पीढ़ी एक ऐसी सुविधा है जिसका उपयोग बहुत से लोग उत्पादन में नहीं करते हैं (लेकिन कई जेनरेट कोड को टेम्पलेट के रूप में लेते हैं)।
यदि आप अपना डीडीएल हाथ से लिखते हैं और वास्तव में SERIAL
का उपयोग करते हैं , फिर GenerationType.SEQUENCE
. का उपयोग करके डेटाबेस व्यवहार के साथ संघर्ष भी कर सकता है। पोस्टग्रेज की पसंदीदा आईडी रणनीति के साथ हाइबरनेट को मैप करने का सही तरीका GenerationType.IDENTITY
का उपयोग करना है . संयोग से, कोड भी बहुत छोटा और अधिक पठनीय है:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;