I\'m using import.sql to write my development data to DB. I\'m using MySQL Server 5.5 and my persistence.xml is here:
Here's a reliable solution without setting any system property.
We assume that import files are encoded with UTF-8
but Java default charset is different, let's say latin1
.
1) Define a custom class for import_files_sql_extractor hibernate.hbm2ddl.import_files_sql_extractor=com.pragmasphere.hibernate.CustomSqlExtractor
2) fix the invalid strings read by hibernate in the implementation.
package com.pragmasphere.hibernate;
import org.hibernate.tool.hbm2ddl.MultipleLinesSqlCommandExtractor;
import java.io.IOError;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
public class CustomSqlExtractor extends MultipleLinesSqlCommandExtractor {
private final String SOURCE_CHARSET = "UTF-8";
@Override
public String[] extractCommands(final Reader reader) {
String[] lines = super.extractCommands(reader);
Charset charset = Charset.defaultCharset();
if (!charset.equals(Charset.forName(SOURCE_CHARSET))) {
for (int i = 0; i < lines.length; i++) {
try {
lines[i] = new String(lines[i].getBytes(), SOURCE_CHARSET);
} catch (UnsupportedEncodingException e) {
throw new IOError(e);
}
}
}
return lines;
}
}
You can change value of SOURCE_CHARSET
with another encoding used by import files.