2010-01-24 32 views
1

沒有創造CLOBS正確的領域我有一個字符串在我的實體的Hibernate在MySQL

@Column(length=40000) 
@Lob 
private String introText; 

,Hibernate對創建introText在我的MySQL數據庫的列是VARCHAR(255),它不與搖擺列長度​​或@Lob註釋。有任何想法嗎?我對Hibernate相對來說比較新,所以我想知道我是否缺少任何其他設置或配置。

回答

1

做以下

// Notice without @Lob 
@Column(length=4000) 
private String getIntroText() { 
    return this.introText; 
} 

在劇本後,我看到

IntroText TEXT 

因此預期這是行不通的。所以我的建議是:使用columnDefinition屬性,而不是

它允許您定義確切的DDL用於定義列類型

@Lob 
@Column(columnDefinition="TEXT (4000)") 
private String getIntroText() { 
    return this.introText; 
} 

現在它工作正常!你可以測試你是否想要

AnnotationConfiguration configuration = new AnnotationConfiguration(); 

configuration 
    .addAnnotatedClass(<YOUR_ENTITY_GOES_HERE>.class) 
    .setProperty(Environment.HBM2DDL_AUTO, "create") 
    .setProperty(Environment.USER, "<USER_GOES_HERE>") 
    .setProperty(Environment.PASS, "<USER_PASS_GOES_HERE>") 
    .setProperty(Environment.SHOW_SQL, "true") 
    .setProperty(Environment.FORMAT_SQL, "true") 
    // Set up your dialect according to the Target MySQL 
    .setProperty(Environment.DIALECT, "org.hibernate.dialect.MySQLDialect") 
    .setProperty(Environment.DRIVER, "com.mysql.jdbc.Driver") 
    .setProperty(Environment.URL, "jdbc:mysql://127.0.0.1:3306/<YOUR_SCHEMA_GOES_HERE>"); 

SchemaExport schema = new SchemaExport(configuration); 
schema.setOutputFile("schema.sql"); 

schema.create(true, true); 

只是一個建議:如果可能的話,把註釋配置放在getter方法而不是成員字段。 Hibernate使用代理來完成你的工作。在getter方法中使用註釋配置時,它工作正常。

問候,

+0

「只是一個建議:如果可能的話,把註釋配置getter方法,而不是成員領域Hibernate使用代理服務器做你的工作,它的getter方法使用註釋配置時工作得很好。」是什麼伎倆。我在屬性上有註釋,而不是吸氣劑。 謝謝! – lupefiasco 2010-02-02 23:46:26