После выполнения следующих действий
// 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 вместо поля member Hibernate использует Proxies для своей работы. И это прекрасно работает при использовании конфигурации аннотации в методе получения.
С уважением,