Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用SpringJDBC模板检索自定义的自动生成密钥_Java_Spring_Spring Jdbc_Jdbctemplate - Fatal编程技术网

Java 使用SpringJDBC模板检索自定义的自动生成密钥

Java 使用SpringJDBC模板检索自定义的自动生成密钥,java,spring,spring-jdbc,jdbctemplate,Java,Spring,Spring Jdbc,Jdbctemplate,我需要在插入记录后使用SpringJDBC模板检索自定义的自动生成密钥 insert into CREDIT(CREDITID,PROFILEID,CLIENTID,EVENTID,CREDIT_HEADING,CREDIT_DESCRIPTION,CREDIT_IMAGE,TESTIMONIAL,TESTIMONIAL_PROVIDER) values('CRE'||CREDITID_SEQ.nextVal,:profileId,:clientId,:eventId,:creditHeadin

我需要在插入记录后使用SpringJDBC模板检索自定义的自动生成密钥

insert into CREDIT(CREDITID,PROFILEID,CLIENTID,EVENTID,CREDIT_HEADING,CREDIT_DESCRIPTION,CREDIT_IMAGE,TESTIMONIAL,TESTIMONIAL_PROVIDER) values('CRE'||CREDITID_SEQ.nextVal,:profileId,:clientId,:eventId,:creditHeading,:creditDescription,:creditImage,:testimonial,:provider)
如果您看到我正在使用一个带有“CRE”前缀的sequence.nextVal作为主键值。这样做的目的是要有像CRE1,CRE2,CRE3…CREn这样的键。我希望使用SpringJDBC模板检索它。下面是我编写的代码,但它引发了一个异常

  public String insertCredit(final Credit credit) throws SQLException {


                final String insertQuery = dbUtil.getQuery("crms.credit.insert");
                SqlParameterSource creditParameters = new BeanPropertySqlParameterSource(credit);
                GeneratedKeyHolder keyHolder = new GeneratedKeyHolder();
                NamedParameterJdbcTemplate namedParamJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
                namedParamJdbcTemplate.update(insertQuery, creditParameters, keyHolder, new String[]{"CREDITID"});
                String creditId = keyHolder.getKey().toString();

    return creditId;
    } 
记录完全插入到数据库中。抛出以下异常

org.springframework.dao.DataRetrievalFailureException: The generated key is not of a supported numeric type. Unable to cast [java.lang.String] to [java.lang.Number]
    at org.springframework.jdbc.support.GeneratedKeyHolder.getKey(GeneratedKeyHolder.java:73)
    at com.bluebench.mediamanager.cmn.dao.crms.CreditDAO.insertCredit(CreditDAO.java:72)
    at com.bluebench.mediamanager.crms.service.CredentialManagementService.addCredit(CredentialManagementService.java:56)
    at com.bluebench.mediamanager.crms.controller.CredentialManagementController.addCredits(CredentialManagementController.java:59)

有没有办法检索主键值?

这是解决方案,而不是使用

String creditId = keyHolder.getKey().toString();
我们应该使用

String creditId = (String) keyHolder.getKeys().get("CREDITID");

实际的暗示来自不明先生。我不能接受你的答案,因为它不正确,但谢谢你暗示了一个不同的方向。

在我的例子中,GeneratedKeyHolder的密钥为空