在Hibernate / Oracle上执行批量更新/插入时出现异常

时间:2016-04-07 13:37:44

标签: java spring-data-jpa

我将对象保存到数据库时遇到异常,下面是代码库模型:

for (BsslpParty bsslp : data) {
    Date activationDate = sdf.parse(bsslp.getAssocStartDate());
    Date deactivationDate = sdf.parse(bsslp.getAssocEndDate());
    if(activationDate.compareTo(startDate)>=0 && activationDate.compareTo(endDate)<=0){
        activeCount++;
        BsslpCustomerInfo bsslpCustomerInfo = new BsslpCustomerInfo();
        bsslpCustomerInfo.setServiceId(bsslp.getBsslpName());
        bsslpCustomerInfo.setActivatedCustomerName(bsslp.getEntitledPartyName());
        bsslpCustomerInfo.setQuarter(quarterDateRange.getStartdate());
        bsslpCustomerInfo.setYear(quarterDateRange.getFinYear());
        bsslpCustomerInfo.setQuarterStartDate(quarterDateRange.getStartdate());
        bsslpCustomerInfo.setQuarterEndDate(quarterDateRange.getEndDate());
        listOfActDeActCust.add(bsslpCustomerInfo);              
    }

    usageMetricschartService.saveAllCustomerData(listOfActDeActCust);
}

......这就是&#34;控制器&#34;代码:

@Override
@Transactional
public void saveAllCustomerData(List<BsslpCustomerInfo> customersData) {
    // TODO Auto-generated method stub

    for (BsslpCustomerInfo bsslpCustomerInfo : customersData) {
        usageMetricsCustomersRepository.save(bsslpCustomerInfo);
    }

}

&#34;服务&#34;实现:

foreach ($i in 1..10) {
    $i
    if ($limit++ -gt 10) { break } # just to stop infinite loop

    if ($i -eq 4) {
        foreach.Reset()
        1..($i-1) | Foreach-Object {
               [void]$foreach.MoveNext()
        }
    }
}

它抛出的错误如下:

  

java.sql.BatchUpdateException:ORA-01722:无效的数字

     

oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:343)       org.springframework.dao.InvalidDataAccessResourceUsageException:无法执行批处理; SQL [插入customer_data   (activated_Customer_Name,deactivated_Customer_Name,quarter,   quarter_End_Date,quarter_Start_Date,service_Id,year,id)值(?,   ?,?,?,?,?,?,?)];嵌套异常是   org.hibernate.exception.SQLGrammarException:无法执行批处理

我已经尝试过所有可能的方法无法解决这个问题;有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

您已将 id 定义为自动生成,但对于您创建的每个实体,都会将0值传递给数据库。这是因为您使用的原始int类型默认情况下初始化为0.如果您将值设置为 id 字段,则不会自动生成。

id 属性更改为键入Integer,以便在保留 null 值时将其发送到JPA,这将导致生成id。