2013-09-04 29 views
21

Birincil karakter dizisi anahtarını içeren bir var. Bu varlık modeli şu şekildedir: 0MeMaLaMaLıNııııııNıııııııııııııııııııııııııııııııııııııııııııııııııııııNı. Bir id nesil stratejisini belirtmezsenizJPA/Hazırda Bekletme Türü'nde String ile @Id nasıl kullanılır?

org.hibernate.TypeMismatchException: Provided id of the wrong type. Expected: class java.lang.String, got class java.lang.Long 
+0

getPrKey() 'yöntemini nasıl tanımlandı? Bir 'String' nesnesini döndürdüğünden emin misin? –

+0

Evet, yalnızca Dize döndürür. – Kailas

+0

herhangi bir ilerleme @Kailas? Garip bir String Kimliği olması çok zor görünüyor. Aynı problemim var. –

cevap

27

, hazırda GenerationType.AUTO kullanacaktır. temel DB bağlı olarak ya kimlik sütunu, dizi ya da masa - Bu

OTOMATİK herhangi neden olur. Eğer here bakarsak

, onlardan hiç değil tip String ait, tip long, short veya int kimliklerini oluşturmak göreceksiniz.

, sen

@Id 
@GeneratedValue(generator = "uuid") 
@GenericGenerator(name = "uuid", strategy = "uuid2") 
@Column(name = "PR_KEY") 
private String prKey; 
+1

Bu anahtarın değeri, programımdaki başka bir varlık tarafından sağlanır. Otomatik olarak oluşturulmasını istemiyorum. GeneratedValue ek açıklamasının oluşturulmasını sağlayacağını düşünüyorum. Lütfen beni düzeltin – Kailas

3

kontrol veritabanı tablosundaki PR_KEY veri türü kullanabilirsiniz Bir kimliğiyle bir String UUID istedi söyle. Sütun, Number türündeyse ve aynı şeyi String'ini varlığınızda eşlemeye çalışıyorsanız, bu sorun oluşabilir.

Aynı işlem, oluşturulan Ids ile coulmn için de geçerlidir.

Dize bir kimliği olarak kullanıldığında Oturum/EntityManager aracılığıyla varlık bulma zaman aynı tip de kullanılmalıdır
+1

Veritabanında VARCHAR2 var. – Kailas

+1

@Kailas Benzer bir sorunum var. bir çözüm buldun mu? Teşekkürler! – user1799214

0

:

yerine uzun sağlayarak:

Long key = 1L; 
MyEntity me = session.get(MyEntity.class, key); 
//or 
MyEntity me = entityManager.find(MyEntity.class, key); 

Dize verilmelidir:

String key = "1"; 
MyEntity me = session.get(MyEntity.class, key); 
//or 
MyEntity me = entityManager.find(MyEntity.class, key); 
İlgili konular