identifier of an instance of was altered from to null

Hibernate的提示错误
Caused by: org.hibernate.HibernateException:
identifier of an instance of ... is alterde from 150 to null

原代码如下:

这个错误是由于在一个事务中更新了主键,而主键是不能被更新的.
这段代码的错误在PoItem poItem=new PoItem();
这句代码放在for循环的外面,因此每次循环插入的时候,Hibernate认为只是一个对象,主键被更新,因此报错,如果放在for循环里面,就正常了,每次插入都是一个新的对象.
正确的代码如下:

### C/C++ 中 'use of undeclared identifier NULL' 错误解决方案 当遇到 `undeclared identifier` 错误时,这表明程序试图使用一个尚未声明的标识符。对于特定于 `NULL` 的情况,在C/C++中,`NULL` 是用来表示空指针常量的一个宏定义。 #### 宏定义差异 在不同的环境中,`NULL` 可能有不同的定义方式: - **C语言**: 通常定义为 `(void *)0` 或者简单的整数常量表达式 `0`. - **C++语言**: 更倾向于将其定义成纯整数值 `0`, 这样可以更好地适应泛型编程的需求[^3]. 如果项目中出现了 `'use of undeclared identifier NULL'` 的编译错误,则意味着当前文件里并没有正确包含能够提供此宏定义的相关头文件。 #### 头文件包含建议 为了确保 `NULL` 能够被正确认识并使用,应该考虑加入如下标准库头文件之一来获取其定义: ```cpp #include <cstddef> // 推荐选项, 提供了NULL和其他基本类型定义 // 或者也可以选择下面任何一个 //#include <cstdlib> //#include <cstdio> ``` 上述任一包含了 `<cstddef>` 的头文件都可以解决问题,并且推荐优先选用 `<cstddef>` 因为其主要职责就是提供这类基础性的定义[^2]. #### 示例修正代码片段 假设有一个简单例子展示如何修复这个问题: ```cpp #include <iostream> #include <cstddef> // 添加这一行以导入NULL定义 using namespace std; int* createArray(int size){ if(size <= 0) return NULL; int *array = (int*)malloc(sizeof(int)*size); return array; } int main(){ int* myArray = createArray(-1); if(myArray != NULL){ // 此处可正常使用NULL比较 free(myArray); } } ``` 通过这种方式,不仅可以消除原有的编译警告或错误,同时也遵循了良好的实践习惯——总是显式地包含必要的头文件以便让代码更加清晰易懂。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值