2017-07-04 68 views
5

kullanmadan en son eklenen anahtarlar nasıl alınır? PreparedStatement içinde "getGeneratedKeys" gibi "createNativeQuery" ile gerçekleştirilen insert'ten oluşturulan son anahtarların/ids nasıl alınacağını bir yöntem arıyorum.Açıklamalar veya "LAST_INSERTED_ID"

İlk paragrafta yazdığım gibi, aslında çalıştığım PreparedStatement'i kullanma olasılığımız olduğunu biliyorum ve bunu farklı durumlar için kullanıyoruz. Ayrıca, veritabanına doğrudan seçim yapabileceğimi ve ayrıca çalışmakta olan "LAST_INSERT_ID" veya "@@ Kimlik" diyebileceğimi biliyorum, ancak bu, kaçınmak istediğim bir yöntem. Şimdilik DB'ye satır eklemeyi kullanıyorum ve daha sonra basitçe "LAST_INSERT_ID()" diyordum ve kimliği aldım.

Bundan kaçınmak istiyorum çünkü ProxySQL'i test etmeye başladığımda, sanırım, bağlantılar/oturumlarla bazı şeyler yapıyorum ve LAST_INSERT dediğimde, sadece sıfır değerini alacağım (ama aynı şeyi denediğimde) Hazırlanan ifadeler ve getGeneratedKeys, çalışır)

this gibi benzer yığın konuları düzinelerce vardır, ancak tek bir yanıt bulamadım.

getResultList ve getLastResult Sorgu yöntemleri ile uğraşıyorum, ancak hiçbir şey en son oluşturulan kimlikleri nasıl alacağınız konusunda başarıya götürmez.

+1

_ “ama ben nedense önlemek istiyorsanız bir yoldur” _ - Bunu nedenini açıklamak sürece, ben bu soruyu eksik düşünün. (Önerebilecekleri alternatif çözümün de “nedeniniz” ile eşleşmeyeceğini kim bilebilir ki ... cevaplamaya çalışmak çok anlamsız olurdu.) – CBroe

+0

Bir soruyu biraz düzenledim ve bir sebep ekledim. – Radim

cevap

0

JPA'yı kullanarak ID, yalnızca yıkama sırasında üretilir. Eğer kimlik çağrı floş ihtiyacın olursa() kimliğini almak için:

Entity en = new Entity(); 
en.setName("My Entity name"); 
em.persist(en); 
em.flush(); 
System.out.println(en.getId()); 
+0

Cevabınız için teşekkür ederiz, ama maalesef bu kadar basit değil. Bazı yerel ekleri kullanıyoruz; burada hangi sütunların hangi tabloda eklendiğini tam olarak belirledik. Yani bu şekilde yapmak istemiyoruz – Radim