2009-08-15 150 views
46

我無法設置一個String類型,它會像文本字段使用Hibernate註釋

public void setTextDesc(String textDesc) { 
    this.textDesc = textDesc; 
} 

@Column(name="DESC") 
@Lob 
public String getTextDesc() { 
    return textDesc; 
} 

,並沒有工作,我檢查了MySQL的架構,它仍然爲varchar(255),我也試過,

@Column(name="DESC", length="9000") 

@Column(name="DESC") 
@Type(type="text") 

我試圖讓類型是文本,任何想法將十分讚賞!

+0

哪個版本冬眠你用? – Oleksii 2017-12-03 22:11:33

回答

77

你說:「我檢查了MySQL的架構,它仍然爲varchar(255)」 - 你以爲休眠,自動改變你的數據庫?它不會。即使你設置了hibernate.hbm2ddl.auto,我也不相信Hibernate會改變現有的列定義。

如果您要生成新的數據庫創建腳本,@Lob應該生成「TEXT」類型列,如果您沒有明確指定長度(或者如果您確實是小於65536)。你總是可以強制通過顯式聲明類型@Column註釋,但是請記住,這不是數據庫之間移植:

@Column(name="DESC", columnDefinition="TEXT") 
+0

對,我每次更改註釋時都會刪除數據庫,並帶有hbm2ddl.auto,所以我希望它會在我再次檢查時發生變化(對於歧義)。不知何故,columnDefinition也不適用於我。我錯過了別的嗎?感謝您的輸入,順便說一句。 – bernardw 2009-08-15 05:23:45

+0

指定'columnDefinition'就像你可以得到的一樣清晰 - 必須有其他的事情發生。你確定你的編譯類正在被Hibernate正確拾取嗎?它是由其他課程擴展/擴展嗎?想不到其他任何可能導致這種情況的東西,但是如果你可以發佈你的整個源代碼給你的這個類,你的Hibernate配置並描述你如何運行它,我一定會看到是否有任何東西跳到我身上。你也可以嘗試添加一個虛假的屬性到這個類,並生成架構作爲SQL文件,看看它是否出現(健全性檢查)? – ChssPly76 2009-08-15 05:49:28

+0

我終於通過將@Indexed放在課程的頂部來實現它,但我無法向自己推薦這是爲什麼...... – bernardw 2009-08-15 05:58:17