guid的主键,hibernate运行sql语句查询后既然只能取得主键的第一位值?
1、表主键生成方式guid2、log.debug(sql.toString());
sql语句pl/sql运行后jh.fds_dsjsb_id为正常的值
生成的sql语句如下:
select distinct jh.fds_id as jhId, kc.fds_kcbh,kc.fds_kcmc,dw.fds_mc,jh.fds_jxb,jh.fdn_skzxs,jh.fdn_skzzxs,jh.fds_czzt,jh.fdn_yjxkrs,jh.fds_kcmm,jh.fds_dsjsb_id from tb_py_xqjxjhb jh,tb_py_kcglxxb kc,tb_py_yxsmb dw where jh.fds_kczkxxb_id=kc.fds_id and jh.fds_kkdwm=dw.fds_dm and jh.fds_czdm='Y' and jh.fds_xnxqb_id='B5BD680B5991413386B122AE3BE58A44' and jh.fds_kkdwm='001' order by kc.fds_kcbh
3、session.createSQLQuery(sql.toString());
list中的object[10]即需要查询的主键jh.fds_dsjsb_id始终为数据中guid值得第一位;
请问:为什么不能取得全值而只能取的第一位呢? --------------------编程问答-------------------- up~ --------------------编程问答-------------------- 什么意思呢?你的“全值”什么意思? --------------------编程问答-------------------- 好比生成的主键值为:B5BD680B5991413386B122AE3BE58A44
结果只取到:B --------------------编程问答--------------------
主键你设置为guid了。存储和读取也应该是guid呀。
是不是你长度设置有问题?
你试着在你得到后直接输出看看guid形式 --------------------编程问答-------------------- 1、debug数据只有一位;在页面直接使用EL取也是一位;
2、我检查了下xml配置数据长度与数据库长度都没错;
--------------------编程问答-------------------- up~~~~ --------------------编程问答-------------------- up... --------------------编程问答-------------------- 继续顶一下,这个问题还是没解决 --------------------编程问答-------------------- 坦白说我不清楚 在这里我也说个我遇到的BUG
我在HQL里这么写的
String hql = "select case when .... then ... when ... then .... else ... end from table";
我在case语句中返回的是汉字 查询出来的时候也是用OBJECT[]获得的 但是返回的汉字只有第一位 不知道为什么
LZ可以尝试换个JAR包看看 说不定就好使了 --------------------编程问答--------------------
补充 HIBERNATE输出的语句我放到PL/SQL上运行 结果是我想要的 但是到了OBJECT[]数组里就变了样子
补充完毕 --------------------编程问答-------------------- up
我也遇到了同样的问题SELECT CASE
WHEN age <= 35
THEN '35岁及以下'
WHEN age > 35 AND age <= 45
THEN '36岁至45岁'
WHEN age > 45 AND age <= 54
THEN '46岁至54岁'
WHEN age > 54 AND age <= 59
THEN '55岁至59岁'
ELSE '60岁及以上'
END sec,
COUNT (1) num
FROM m_party_members
WHERE years = :v_year
GROUP BY CASE
WHEN age <= 35
THEN '"35岁及以下"'
WHEN age > 35 AND age <= 45
THEN '36岁至45岁'
WHEN age > 45 AND age <= 54
THEN '46岁至54岁'
WHEN age > 54 AND age <= 59
THEN '55岁至59岁'
ELSE '60岁及以上'
END;
结果应该为 :46岁至54岁 13
60岁及以上 28
36岁至45岁 13
55岁至59岁 11
35岁及以下 23
实际结果为:
4 13
6 28
3 13
5 11
3 23
--------------------编程问答-------------------- --------------------编程问答--------------------
我的问题我解决了 在hibernate.fbm.xml中指定一下数据类型</sql-query>
<sql-query name="partyMemberAgeChartData">
<return-scalar column="sec" type="java.lang.String"/>
<return-scalar column="num" type="java.lang.Integer"/>
<![CDATA[
]]>
</sql-query> --------------------编程问答-------------------- 我的问题我解决了
在Hibernate.hbm.xml文件设置一下返回数据的类型
<sql-query name="partyMemberAgeChartData">
<return-scalar column="sec" type="java.lang.String"/>
<return-scalar column="num" type="java.lang.Integer"/>
<![CDATA[
sql语句。。。。
]]>
</sql-query> --------------------编程问答-------------------- Hibernate 的 Entry 中配置的 guid 的长度是不是1。。 ?
补充:Java , Java EE