当前位置:编程学习 > JAVA >>

guid的主键,hibernate运行sql语句查询后既然只能取得主键的第一位值?

1、表主键生成方式guid
2、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 --------------------编程问答--------------------
引用 3 楼 yzq94192448 的回复:
好比生成的主键值为:B5BD680B5991413386B122AE3BE58A44
结果只取到:B

主键你设置为guid了。存储和读取也应该是guid呀。
是不是你长度设置有问题?
你试着在你得到后直接输出看看guid形式 --------------------编程问答-------------------- 1、debug数据只有一位;在页面直接使用EL取也是一位;
2、我检查了下xml配置数据长度与数据库长度都没错;

引用 4 楼 ivorytower 的回复:
引用 3 楼 yzq94192448 的回复:

好比生成的主键值为:B5BD680B5991413386B122AE3BE58A44
结果只取到:B

主键你设置为guid了。存储和读取也应该是guid呀。
是不是你长度设置有问题?
你试着在你得到后直接输出看看guid形式
--------------------编程问答-------------------- up~~~~ --------------------编程问答--------------------   up... --------------------编程问答-------------------- 继续顶一下,这个问题还是没解决 --------------------编程问答-------------------- 坦白说我不清楚 在这里我也说个我遇到的BUG

我在HQL里这么写的

String hql = "select case when .... then ... when ... then .... else ... end from table";

我在case语句中返回的是汉字 查询出来的时候也是用OBJECT[]获得的 但是返回的汉字只有第一位 不知道为什么
LZ可以尝试换个JAR包看看 说不定就好使了 --------------------编程问答--------------------
引用 9 楼 bearkin 的回复:
坦白说我不清楚 在这里我也说个我遇到的BUG

我在HQL里这么写的

Java code

String hql = "select case when .... then ... when ... then .... else ... end from table";


我在case语句中返回的是汉字 查询出来的时候也是用OBJECT[]获得的 但是返回的汉字只有第一位 不……


补充 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
--------------------编程问答-------------------- --------------------编程问答--------------------
引用 11 楼 ma_tian_tian 的回复:
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 ……




我的问题我解决了 在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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,