在事务提交后,自动递增的值不会保留在持久性对象中,直到会话关闭

Auto incremented value not persist in persistent object after transaction commit until session closed

提问人:SLMORA 提问时间:6/20/2023 更新时间:6/20/2023 访问量:15

问:

我有生成的“Id”的实体以及另一个具有自动递增值的属性调用“code”。调用后,持久对象中“code”的值为空事件,数据库将更新值,并尝试在同一会话中从数据库中获取值,从而获得空值。但是对于新会话,自动生成的值将获取到新的持久性对象。session.persist(entity)transaction.commit()

@Data
@NoArgsConstructor
public class BaseEntity implements Serializable
{
    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    private Integer  id;

    @Column(name = "code")
    @GeneratedValue(strategy= GenerationType.AUTO)
    private Integer code;

    @Column(name = "note")
    private String note;

}
 @Override
    public Optional<Integer> persist(T entity)
    {
        Transaction transaction = null;
        try{
            transaction=session.beginTransaction();
            session.persist(entity);
            session.flush();
            transaction.commit();
            return Optional.of(entity.getId());
        } catch (Throwable throwable) {
            if (transaction != null) {
                transaction.rollback();
            }
            LOGGER.error(ExceptionUtils.getStackTrace(throwable));
            throwable.printStackTrace();
        }

        return Optional.empty();
    }
Hibernate JPA 事务 自动递增 持久

评论

0赞 Mar-Z 6/20/2023
在代码中,您不会从数据库中获取实体,而只能使用 getter 访问 id。这当然是无效的。我会使用 JPA 存储库而不是 vanilla Hibernate 会话。那么你只需要一行:entity = repository.save(entity)

答: 暂无答案