मैं जेपीए Toplink जरूरी और एसक्यूएल सर्वर का उपयोग कर रहा 2008क्यों जेपीए जारी है() ऑटो-वृद्धि प्राथमिक आईडी उत्पन्न नहीं करता है?
मेरा लक्ष्य डेटा है कि तालिका में सम्मिलित किया जा रहा है की ऑटो वेतन वृद्धि प्राथमिक कुंजी मूल्य प्राप्त करने के लिए है। मैं जेडीबीसी में जानता हूं, वहाँ प्राप्त है ISertedId() विधि की तरह है जो आपको स्वत: वृद्धि प्राथमिक आईडी की आईडी देता है (लेकिन यह डालने वाले सम्मिलित कथन के बाद है)
जेपीए में, मुझे पता चला कि @GenratedValue annotation
चाल चल सकता है।
@Entity
@Table(name = "tableOne")
public class TableOne implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "tableId")
private Integer tableId;
अब अगर मैं कोड को चलाने के नीचे यह मुझे देना चाहिए ऑटो आईडी वृद्धि की जाती है, लेकिन यह NULL भेजता है ...
EntityManager em = EmProvider.getInstance().getEntityManagerFactory().createEntityManager();
EntityTransaction txn = em.getTransaction();
txn.begin();
TableOne parent = new TableOne();
em.persist(parent); //here I assume that id is pre-generated for me.
System.out.println(parent.getTableId()); //this returns NULL :(
मैं आईडी प्राप्त कर सकते हैं करने के लिए प्रतिबद्ध है कि अगर मैं:। Em.getTransaction() के लिए प्रतिबद्ध() लेकिन वहाँ पहले से ही जारी रहती है साथ आईडी प्राप्त करने के लिए कोई रास्ता नहीं है ??? हम्म –
आपकी कोड के अनुसार काम करना चाहिए। मैंने इसका परीक्षण किया और मुझे आईडी करने से पहले आईडी मिलती है या यदि मैं रोलबैक करता हूं। अजीब है कि यह नहीं करता है। – Joel
क्या यह कोई फर्क पड़ता है यदि tableId इंटीजर की बजाय int है? – Joel