适用 Java 使用 hibernate查询数据数据后台汉字展示不全

    xiaoxiao2022-07-13  146

    常量在数据库中被认为是CHAR类型的,Hibernate取值时将其保存为Character类型,而Character只能保存一个字符,所以造成返回值中只存在一个字符。Hibernate官方已存在此bug ,却从未修复。

    该BUG给出两种解决方案:

    1.继承一个Dialect,并注册CHAR类型的对应方式。代码如下

     

    public class MySQLServerDialect extends org.hibernate.dialect.SQLServerDialect  {      public MySQLServerDialect()      {          super();          //very important, mapping char(n) to String          registerHibernateType(Types.CHAR, Hibernate.STRING.getName());      }  }  

     

     

     

    2.设置字段对应的类型(缺点是如果查询很多字段,每个字段都必须设置,没设置类型的字段在结果集中是不存在的),代码如session.createSQLQuery("select '汉字测试as name from dual").addScalar("name", Hibernate.STRING).list()  

    3.还有一种解决方法是在SQL中设置该字段的类型,代码如下 ,我用的是该种方法,其他的没有验证:

    select cast(case status  when 1 then '已回复' else '未回复' end  as varchar2(20))  from baseinfo

    该方法在Oracle和SQL Server中可用。

    4.还有一种我自己实验出来的不一定适用  就是在查询的汉字之间加几个空格就可以了,但是这样展示的时候会出现空格

    select case status when ’1‘ then ’已   回复‘ else ’未   回复‘ end as  status from baseinfo

    原文链接:http://blog.csdn.net/z69183787/article/details/12016833

     

     

    最新回复(0)