Как оформить SET NAMES в Hibernate Query

У меня сейчас проблема. Я использую Clear db через Azure. Я не могу сохранить символы UTF8 в таблице. Я использую комбинацию Spring+Hibernate+Mysql.

Я могу заставить его работать локально, обновив my.cnf файл, но в Azure он не позволяет мне обновляться, потому что я использую версию сообщества и используется многими пользователями. Они посоветовали следовать нижеприведенному пункту. Но я не знаю, как установить это в конфигурации гибернации

каждый раз, когда вы открываете соединение с базой данных, перед выполнением любого запроса или запросов, которые вы хотите выполнить для этого соединения, вы должны выполнить запрос SET NAMES, используя синтаксис, описанный по адресу https://dev.mysql.com/doc/refman/5.5/en/set-names.html. Так, например, чтобы установить кодировку и параметры сортировки, которые вы хотите, вы можете использовать

SET NAMES utf8 COLLATE utf8_bin;

Мой файл гибернации приведен ниже

@Configuration
@EnableTransactionManagement
public class HibernateConfig {


/**
 * Uses an datasource library for local testing with out creating datasources on the server. Not to be used for Production.
 *
 * @return
 */
@Bean
public DriverManagerDataSource jndiDataSource() {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    try {
        DriverManager.registerDriver(new com.mysql.jdbc.Driver());
    } catch (SQLException e) {
        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
    }
    dataSource.setDriverClassName("com.mysql.jdbc.Driver");

    dataSource.setUrl("jdbc:mysql://<azureurl>-f.cloudapp.net:3306/db1");
    dataSource.setUsername("user");
    dataSource.setPassword("pw");




    return dataSource;
}

/**
 * Datasource to be used when running on App servers
 * @return
 * @throws javax.naming.NamingException
 */
/*public @Bean
DataSource jndiDataSource() throws NamingException{
    return (DataSource) new InitialContext().lookup(environment.getProperty("datasourceJndi"));
}
*/
/**
 * @return
 * @throws javax.naming.NamingException
 */
@Bean
public org.springframework.orm.hibernate4.LocalSessionFactoryBean sessionFactory() throws NamingException {
    LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();

    Properties prop = new Properties();
    prop.put("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
    //prop.put("hibernate.dialect", "org.hibernate.dialect.OracleDialect");
    //Be extremely careful before changing this value to Update or Create
    prop.put("hibernate.hbm2ddl.auto", "none");
    prop.put("hibernate.show_sql", "false");
    prop.put("hibernate.enable_lazy_load_no_trans","true");
    prop.put("hibernate.connection.CharSet","utf8");
    prop.put("hibernate.connection.characterEncoding","utf8");
    prop.put("hibernate.connection.useUnicode",true);

    sessionFactory.setDataSource(this.jndiDataSource());
    sessionFactory.setPackagesToScan(new String[]{"com.sp.domain"});
    sessionFactory.setHibernateProperties(prop);
    return sessionFactory;
}

/**
 * @return
 * @throws javax.naming.NamingException
 */
@Bean
public HibernateTransactionManager transactionManager() throws NamingException {
    HibernateTransactionManager txManager = new HibernateTransactionManager();
    txManager.setDataSource(this.jndiDataSource());
    txManager.setSessionFactory(this.sessionFactory().getObject());
    return txManager;
}
}

0 ответов

Другие вопросы по тегам