views:

100

answers:

1

I have a String in my Entity

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

The column in my MySQL database that Hibernate creates for introText is a varchar(255), which doesn't jive with the column length or @Lob annotation. Any ideas? I'm relatively new to Hibernate, so I wonder if I'm missing any other settings or configurations.

+1  A: 

Hi,

After doing the following

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

In script, i see

IntroText TEXT

So it does not work as expected. So my advice is: use columnDefinition attribute instead

It allows you to define the exact DDL used to define the column type

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

Now it works fine! You can test if you want

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);

Just an advice: if possible, put annotation configuration in getter method instead of member field. Hibernate uses Proxies to do your job. And it works fine when using annotation configuration in getter method.

regards,

Arthur Ronald F D Garcia
"Just an advice: if possible, put annotation configuration in getter method instead of member field. Hibernate uses Proxies to do your job. And it works fine when using annotation configuration in getter method." was what did the trick. I had the annotations on the property instead of the getter.Thanks!
lupefiasco