保存时候 id报错 问题

今天用hibernate 碰到个老问题, 即id 自增 报错。
解决办法
 <id name="wpm00i" type="java.lang.Integer">
            <column name="wpm00i" />
            <generator class="native" />
</id>

private Integer wpm00i = 0; 设置一个0,否则报 is null ....错误。


在数据保存过程中,数据库操作可能会遇到多种错误或异常。以下是一些常见的错误类型、错误代码及其对应的异常信息: ### 数据库常见错误类型与异常信息 1. **约束违反错误** - **主键冲突(Primary Key Violation)**:当尝试插入或更新一条记录时,若主键值已存在,则会引发此类错误。例如,在MySQL中可能返回如下错误信息: ``` Duplicate entry 'xxx' for key 'PRIMARY' ``` 对应的SQLSTATE码为 `23000` [^4]。 2. **外键约束错误(Foreign Key Constraint Error)** - 当尝试插入或更新的数据引用了不存在的外键值时,会触发此类错误。在MySQL中,可能返回类似以下信息: ``` Cannot add or update a child row: a foreign key constraint fails ``` SQLSTATE码同样为 `23000` [^4]。 3. **唯一性约束错误(Unique Constraint Violation)** - 当插入或更新的数据违反了唯一性索引时,将出现此错误。例如: ``` Duplicate entry 'xxx' for key 'unique_index_name' ``` SQLSTATE码为 `23000` [^4]。 4. **字段长度超出限制(Data Too Long)** - 当插入的字符串长度超过字段定义的最大长度时,数据库会报错。例如在MySQL中可能出现: ``` Data too long for column 'column_name' at row x ``` SQLSTATE码为 `22001` [^4]。 5. **无效数据格式(Incorrect Data Format)** - 插入的数据类型与字段定义不匹配时会报错。例如插入非数值到整数字段,可能会提示: ``` Incorrect integer value: 'abc' for column 'column_name' ``` SQLSTATE码为 `HY000` [^4]。 6. **空值插入非空字段(Not Null Constraint Violation)** - 如果尝试插入 `NULL` 到不允许为空的字段,会触发错误。例如: ``` Column 'column_name' cannot be null ``` SQLSTATE码为 `23000` [^4]。 7. **事务处理失败(Transaction Failure)** - 在执行事务过程中发生错误,如死锁、事务回滚等。MySQL中可能显示: ``` Deadlock found when trying to get lock; try restarting transaction ``` SQLSTATE码为 `40001` [^4]。 8. **连接超时或中断(Connection Timeout/Interrupted)** - 数据库连接失败或在操作过程中断开连接。例如: ``` Lost connection to MySQL server during query ``` SQLSTATE码为 `HY000` [^4]。 9. **权限不足(Access Denied)** - 用户没有足够的权限执行某些操作,如插入、更新或删除数据。例如: ``` Access denied for user 'user'@'host' to database 'database' ``` SQLSTATE码为 `42000` [^4]。 10. **锁等待超时(Lock Wait Timeout)** - 当多个事务竞争同一资源导致长时间等待时,可能会抛出锁等待超时错误。例如: ``` Lock wait timeout exceeded; try restarting transaction ``` SQLSTATE码为 `HY000` [^4]。 ### 示例代码:捕获并处理数据库异常(Python + MySQL) ```python import mysql.connector from mysql.connector import errorcode try: cnx = mysql.connector.connect(user='user', password='password', host='localhost', database='test_db') cursor = cnx.cursor() # 尝试插入数据 insert_query = "INSERT INTO users (id, name) VALUES (%s, %s)" data = (1, 'John Doe') cursor.execute(insert_query, data) cnx.commit() except mysql.connector.Error as err: if err.errno == errorcode.ER_ACCESS_DENIED_ERROR: print("权限不足,请检查用户名和密码") elif err.errno == errorcode.ER_BAD_DB_ERROR: print("数据库不存在") elif err.errno == errorcode.ER_DUP_ENTRY: print("主键冲突,数据重复") else: print(f"发生未知错误: {err}") finally: try: cursor.close() cnx.close() except: pass ``` ### 常见ORA错误(Oracle数据库) - **ORA-00001: Unique Constraint Violated** 表示插入或更新操作违反了唯一性约束。 - **ORA-01400: Cannot Insert NULL into Not Null Field** 尝试向非空字段插入空值。 - **ORA-01438: Value Larger Than Specified Precision Allowed for This Column** 插入的数值精度超过了字段定义。 - **ORA-01722: Invalid Number** 字段期望数字类型,但输入的是非数字字符。 - **ORA-02291: Integrity Constraint Violated - Parent Key Not Found** 外键引用的父表记录不存在[^1]。 ### 常见PL/SQL错误(Oracle存储过程相关) - **PLS-00306: Wrong Number or Types of Arguments in Call to 'procedure_name'** 调用存储过程时参数数量或类型不正确。 - **PLS-00201: Identifier 'identifier' Must Be Declared** 使用了未声明的变量或函数。 - **PLS-00905: Object is Invalid** 存储过程或函数因编译错误处于无效状态[^1]。 ### 系统级错误(操作系统相关) - **OS-00001: Out of Memory** 操作系统内存不足,可能导致数据库无法执行某些操作。 - **OS-00002: Disk Full** 磁盘空间不足,影响数据库文件写入。 - **OS-00003: File Not Found** 数据库所需的文件丢失,如日志文件或配置文件[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值