Я решил эту проблему следующим образом:
Я создал следующий класс:
import org.hibernate.cfg.DefaultNamingStrategy;
public class MysqlAdvancedNamingStrategy extends DefaultNamingStrategy{
<pre><code>@Override
public String columnName(String columnName) {
return "`"+super.columnName(columnName)+"`";
}
@Override
public String tableName(String tableName) {
return "`"+super.tableName(tableName)+"`";
}
</code>
} У меня былустановив namingStrategy «MysqlAdvancedNamingStrategy» в предыдущем пункте.
Преимущества этого решения в том, что вам не нужно изменять все аннотации в вашем коде.
Itэто также чистое решение, потому что по какой-то причине вам может потребоваться приложение, которое обращается к одной и той же «логике» базы данных в двух разных «базах данных» (то есть с двумя стилями экранирования), с этим решением вы можете перехватить, какую базу данных вы используете, иВы можете изменить стратегию экранирования в «время выполнения», однако аннотации оцениваются во «время компиляции».
Это также чистое решение, если вы используете Spring Framework, с помощью которого вы можете изменить стратегию экранирования безкасаясь java-кода, устанавливая bean-компонент в фабрике сеансов с помощью id="namingStrategy"
и class="util.MysqlAdvancedNamingStrategy"
.