将 Eclipselink 与 MySQL 结合使用。当我的实体没有被正确验证并且无效数据试图泄漏到数据库中时,将抛出运行时异常并包含以下详细信息:
Caused by: org.springframework.transaction.TransactionSystemException: Could not commit
JPA transaction; nested exception is javax.persistence.RollbackException:
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.0.v20130815-a4708b6):
org.eclipse.persistence.exceptions.DatabaseException Internal Exception:
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'ip_address' at row 1
Error Code: 1406
Call: INSERT INTO statistics (action_name, created_at, ip_address, object_id, object_type, user_id) VALUES (?, ?, ?, ?, ?, ?)
bind => [6 parameters bound]
Query: InsertObjectQuery(com.example.Statistics@3153ead4)"
我的问题是:如何从异常中发现绑定(bind)参数的值并将其保存在日志中? 6 个参数绑定(bind)
帮助不大。
编辑:
简单而强大的解决方案是覆盖实体的 toString()
方法。然后它将在日志中使用,揭示将要保存的对象的详细信息:
...
Call: INSERT INTO statistics (action_name, created_at, ip_address, object_id, object_type, user_id) VALUES (?, ?, ?, ?, ?, ?)
bind => [6 parameters bound]
Query: InsertObjectQuery(Statistics{ID=null, ObjectType=PRODUCT, Action=VIEW, ObjectId=1, User=null, IP=someRandomInvalidTooLongIpAddress})"
但是,我仍然想知道是否有任何标志可以设置为自动扩展X parameters bound
短语。
最佳答案
您可以使用 eclipselink.logging.parameters 持久性属性启用参数记录:
<property name="eclipselink.logging.parameters" value="true"/>
参见 http://wiki.eclipse.org/EclipseLink/Examples/JPA/Logging有关登录 EclipseLInk 的更多信息。
关于java - 失败时显示查询绑定(bind)的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21453302/