在单个事务中分配密钥并在Hibernate中插入

时间:2011-05-09 15:34:45

标签: hibernate spring transactions

我正在使用 Spring with Hibernate(和SQL Server数据库)。对于我的一个实体,我需要生成一个数字和字符串的组合的PK ..像ABC1001,DEF1002等。

我正在为我的实体使用'assigned'密钥,因为这种PK(数字和字符串的组合,即ABC 1001)无法通过普通序列/标识生成。

我想要的是

  1. 通过DB Identity生成PK并将Identity值增加1(用于下一代PK生成)
  2. 将结果(即上一步返回的数字)与适当的字符串(即ABC)合并,使其成为我的实体的PK,例如:ABC1001
  3. 将此密钥分配给我的实体,并通过调用 session.save()
  4. 来保留我的数据

    如果有任何失败,请回滚事务,即回滚实体插入并回滚对Identity进行的任何更改

    我想到的一种方法是:创建一个可以执行前两步的存储过程(生成PK,增量标识,将数字与字符串组合),然后将密钥分配给实体并调用session.save ()。

    我的问题是我必须使用HibernateCallBack来执行我的程序,我将不得不处理JDBC连接。一旦方法完成,我将不得不关闭JDBC连接,然后在下一步中我可以继续保存我的实体(session.save())。

    我找不到执行这两件事的方法[即在单个事务中调用该过程并调用session.save()]。我正在使用Spring提供的声明式事务。

    有没有办法在单个事务中执行这两件事,所以如果实体插入失败,我甚至可以回滚对Identity所做的更改?

    或者你可以建议更好的策略吗?

0 个答案:

没有答案