【web開発】spring+hibernate 4は中国語のソートをサポート

1510 ワード

mysqlのutf 8符号化フォーマットでの中国語のソートに問題が発生します.現在はhqlクエリーを使用しているため、元のsql関数convertはサポートされていません.有効な解決方法は次のとおりです.
(1)新しいクラスを作成し、MySQL 5 Dialectから派生する
public class MyISAMDialect extends MySQL5Dialect {
	
   public MyISAMDialect(){
	super();
	registerFunction("convert_mine", new SQLFunctionTemplate(StandardBasicTypes.STRING, "convert(?1 using gbk)"));
   }
    @Override
    public String getTableTypeString() {
        return "engine=MyISAM";
    }
}

なお、hibernate 4版ではStandardBasicType.STRING(パッケージorg.hibernate.type.StandardBasicType;)それは...STRING.
(2)コンフィギュレーションファイルで参照または変更:
<bean id="sessionFactory"
		class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="hibernateProperties">
			<props>  //...
				// ...
				<prop key="hibernate.dialect">com.miniwork.mymanager.util.MyISAMDialect</prop> //...
			</props>
		</property>
		//...
	   </property>
	</bean>

元のhibernatedialectはorgに設定可能である.hibernate.dialect.MySQLDialectは、カスタムクラスMyISAMDialectのスーパークラスです.(3)hqlクエリ文を使用する場合、中国語が表示される可能性のある列にnameなどの名前を使用します.
from xxx order by convert_mine(name);

これで中国語の正しいソートが完了します.