数据库中32位的id用java查询出来是0
【问题描述】
数据库中的32位的guid查询出来是0
【原因分析】
淦,查了半天,发现建表的老哥将表的主键的类型设置成char类型。我们这边的持久层的框架用的hebinate
,hebinate了解不深,但我们猜测一波。看下面的截图,框架将数据库中的char类型的字段映射成了java中的character字段。这挠挠屁股也知道映射过来是有问题的,光是字节长度这个问题就解决不了。也就是说框架底层中new了一个新的character对象,但是没有映射成功,而且这个character对象设置的默认值是0。
【解决方案】
既然在持久层框架中就做了处理,那我们只能从sql语句这个方面入手了。也就是说我们在查询的时候就将char类型转成varchar类型就行了,这样数据就可以正确的显示了。select cast(a.id AS varchar2(32))