项目是osgi+eclipselink+jpa搭建的,对象是这样创建的
public class BackupRunDetails {
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "backup_details_id_gen")
    @TableGenerator(name = "backup_details_id_gen",
                    table = "persistent_key_gen",
                    pkColumnName = "seq_name",
                    valueColumnName = "seq_value",
                    pkColumnValue = "Backup_Run_Details_seq",
                    initialValue = 1,
                    allocationSize = 5)
    @Column(name = "id")
    private long id;
.......
每次在存数据的时候都需要保证persistent_key_gen表中的Backup_Run_Details_seq值比此表的要大,不重复,要不然就会报错,现在是有时候添加表中数据的时候,Backup_Run_Details_seq的值没有添加可能会让BackupRunDetails 表中的id超过Backup_Run_Details_seq的值,现在需要抛出一个异常,并处理,例如在最大id的基础上+5,try.catch不行,有懂的嘛

解决方案 »

  1.   

    Internal Exception: java.sql.SQLIntegrityConstraintViolationException: 语句异常终止,因为它导致“BACKUP_DETAILS”上所定义的“SQL170721172037330”标识的唯一或主键约束或唯一索引中出现重复键值。
    Error Code: 0
    Call: INSERT INTO backup_details (id, details, end_time, error, execution_id, grid_data, start_time, device_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
    bind => [100, null, 2017-09-22 11:40:12.318, com.netconfig.protocols.NoEnabledProtocolsException: 设备<172.16.7.90>无法访问或相关服务未开启, 无法访问对应端口 / The necessary protocols for 172.16.7.90 are either disabled or unreachable.
    at com.netconfig.net.credentials.NetconfigProtocolManager.calculateProtocolSets(NetconfigProtocolManager.java:217)
    at com.netconfig.net.credentials.NetconfigProtocolManager.calculateSupportedProtocolSets(NetconfigProtocolManager.java:143)
    at com.netconfig.net.credentials.CredentialsProvider.calculateSupportedProtocolSets(CredentialsProvider.java:267)
    at Proxy6cb5be67_95b7_443a_8285_816c1b980daa.calculateSupportedProtocolSets(Unknown Source)
    at com.netconfig.service.job.backup.CredentialElf.calculateProtocolSets(CredentialElf.java:136)
    at com.netconfig.service.job.AbstractAdapterTask.resolveCredentialsAndProtocols(AbstractAdapterTask.java:226)
    at com.netconfig.service.job.AbstractAdapterTask.execute(AbstractAdapterTask.java:74)
    at com.netconfig.service.dispatcher.Operation.execute(Operation.java:93)
    at com.netconfig.service.dispatcher.OperationExecutor$JobThread.runJob(OperationExecutor.java:619)
    at com.netconfig.service.dispatcher.OperationExecutor$JobThread.run(OperationExecutor.java:511)
    , 48428, null, 2017-09-22 11:40:08.275, 26]
    Query: InsertObjectQuery(com.netconfig.service.job.backup.BackupRunDetails@4094a28d)
    以上为报错日志
      

  2.   

    它是将数据库所有表里的数据在保存前需要确认下persistent_key_gen表中对应的数据(例如;Backup_Run_Details_seq)的值和要存数据库表里的值不能相等,大部分表都关联persistent_key_gen这个表,当初他们设计的时候就是这样的,我知道报错是什么意思,就是当persistent_key_gen表中的对应数据的值与id重复的时候生成的id就会重复,就会报错,现在希望是能抛出这个异常,并进行修改,顺便一提,保存的方法是 @PersistenceContext(unitName = "netconfig-backup")
        EntityManager em;
    方法内:
    em.persist(对象);