我将对象保存到数据库时遇到异常,下面是代码库模型:
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:无法执行批处理
我已经尝试过所有可能的方法无法解决这个问题;有人可以帮我吗?
答案 0 :(得分:1)
您已将 id 定义为自动生成,但对于您创建的每个实体,都会将0值传递给数据库。这是因为您使用的原始int
类型默认情况下初始化为0.如果您将值设置为 id 字段,则不会自动生成。
将 id 属性更改为键入Integer
,以便在保留 null 值时将其发送到JPA,这将导致生成id。