2009-12-09 27 views
13

JPA (PostgreSQL kullanıyorum) kullanarak uzun metinde nasıl devam edeceğimi söyleyen var mı?JPA ve PostqreSQL: uzun dize kalıcılığı

@Lob 
private String body; 

Ancak bu tip charactervarying veritabanında (255) tarlası üretir:

İşte benim sınıfta çok uzun bir dize tanımlanmış bir yol. boşuna

@Column(columnDefinition="TEXT") 
private String body; 

Ama her şeyi:

Dahası, ben @column ek açıklama kullanmayı denedim.

Bu sorun hakkında yararlı bir yorum için minnettar olurum.

+0

İlk şeyi yapıyordum ve postgresql'de bir OID, LO alıyorum, gerçek kabus – jacktrades

cevap

17
@Column(columnDefinition="TEXT") 

gerçekten bunu yapmak için bir yoldur. Belki de DDL'nizi yeniden oluşturmak zorundasınız?

+0

Maalesef, @Column ek açıklaması tamamen yok sayılıyor. – emanemos

+0

Funny TEXT büyük harfle ... – jacktrades

+0

Sevgili Jonathan, yukarıda önerilen düzeltmeden yoruldum ama hata alıyorum. Yardımınız apreciable olacaktır. Lütfen yardım et. http://stackoverflow.com/questions/25094410/hibernate-abstractmethoderror-setcharacterstreamiljava-io-readerjv?noredirect=1#comment39048566_25094410 –

10

Bu çok eski bir gönderidir, ancak çok sayıda görüşe sahip olduğu için ve bugün bile benzer bir soruyu yaşadım, sanırım basit bir cevap.

Benim çözümüm benzer, ama onun yerine LONGTEXT sütun gerekli bulundu:

@Column(columnDefinition="LONGTEXT") 
private String body; 

Ve evet, bunu yeniden oluşturmak için var. Play kullanıyorum! ve uygulamamı yeniden başlatmam gerekiyordu.

+3

TEXT yerine LONGTEXT kullanma niyetiniz neydi? Sebebi eksik. –

15

Bugün aynı davaydı. Sadece

@Lob 
private String body; 

typ "metin" (PostgreSQL - Değişken sınırsız uzunluğu) bir db sütun oluşturmalısınız ancak tablo rejenere edilmelidir.

+0

Bu doğru yaklaşım olmalı, diğer çözümler bana veriyor: HATA: "' "veya yakınında sözdizimi hatası –

0

Ayrıca doğrulama ek açıklamaları kullanabilirsiniz: Ayrıca elbette bir doğrulama kısıtı olarak hizmet edecek

@Size(max=xxx) 

.