页面查询数据和数据库数据不一致遇到的两种情况:
1.hibernate 使用中 表CARD_SIGN,CARDSIGNID为主键,因需求需要将此表主键变更为复合主键在原有主键字段的基础上又增加了一个字段CARDTYPE作为复合主键。此时使用的是hibernate本身的查询方法。相同的hql查询结果显示页面数据和数据库查询出来的结果不一致。在原有主键CARD_SIGN两条数据的情况下,页面展示的都是两条相同数据和数据库数据不一致,查询数据总条数相同。原因:hibernate的配置文件hbm.xml中的id配置。id标签中的column字段应该配置的是唯一的列,但是我的数据库表中是非唯一中,每次查询都会出现很多条记录,导致数据拿出来的时候,根据id列拿,系统就只拿出了第一个id的数据,还拿了两遍,数据总量是对的,每条记录都有一条重复的跟着。
解决方案:用一个唯一的字段来代替id中非唯一的字段。或是规避hibernate的hbm.xml同数据库的关系使用createSQLQuery()方法直接从对象中取值,再或修改hbm.xml配置文件中的主键为复合主键及相关部分。
2.hibernate 中使用createSQLQuery()方法查询数据,页面展示的一列字段中只取了该字段的第一位数据。查看发现ORACLE数据库表中该字段是char 长度为3。
解决方案:将该字段数据类型更改为varchar2类型即可
1.hibernate 使用中 表CARD_SIGN,CARDSIGNID为主键,因需求需要将此表主键变更为复合主键在原有主键字段的基础上又增加了一个字段CARDTYPE作为复合主键。此时使用的是hibernate本身的查询方法。相同的hql查询结果显示页面数据和数据库查询出来的结果不一致。在原有主键CARD_SIGN两条数据的情况下,页面展示的都是两条相同数据和数据库数据不一致,查询数据总条数相同。原因:hibernate的配置文件hbm.xml中的id配置。id标签中的column字段应该配置的是唯一的列,但是我的数据库表中是非唯一中,每次查询都会出现很多条记录,导致数据拿出来的时候,根据id列拿,系统就只拿出了第一个id的数据,还拿了两遍,数据总量是对的,每条记录都有一条重复的跟着。
解决方案:用一个唯一的字段来代替id中非唯一的字段。或是规避hibernate的hbm.xml同数据库的关系使用createSQLQuery()方法直接从对象中取值,再或修改hbm.xml配置文件中的主键为复合主键及相关部分。
2.hibernate 中使用createSQLQuery()方法查询数据,页面展示的一列字段中只取了该字段的第一位数据。查看发现ORACLE数据库表中该字段是char 长度为3。
解决方案:将该字段数据类型更改为varchar2类型即可