diff --git a/backend/internal/repository/group_repo.go b/backend/internal/repository/group_repo.go index 5b9563a2..f54588ce 100644 --- a/backend/internal/repository/group_repo.go +++ b/backend/internal/repository/group_repo.go @@ -239,7 +239,6 @@ func (r *groupRepository) DeleteCascade(ctx context.Context, id int64) ([]int64, exec := r.sql txClient := r.client var sqlTx *sql.Tx - var txClientClose func() error if r.begin != nil { sqlTx, err = r.begin.BeginTx(ctx, nil) @@ -248,12 +247,11 @@ func (r *groupRepository) DeleteCascade(ctx context.Context, id int64) ([]int64, } exec = sqlTx txClient = entClientFromSQLTx(sqlTx) - txClientClose = txClient.Close + // 注意:不能调用 txClient.Close(),因为基于事务的 ent client + // 在 Close() 时会尝试将 ExecQuerier 断言为 *sql.DB,但实际是 *sql.Tx + // 事务的清理通过 sqlTx.Rollback() 和 sqlTx.Commit() 完成 defer func() { _ = sqlTx.Rollback() }() } - if txClientClose != nil { - defer func() { _ = txClientClose() }() - } // Lock the group row to avoid concurrent writes while we cascade. var lockedID int64 diff --git a/backend/internal/repository/user_repo.go b/backend/internal/repository/user_repo.go index be8cfb56..c81225ff 100644 --- a/backend/internal/repository/user_repo.go +++ b/backend/internal/repository/user_repo.go @@ -40,7 +40,6 @@ func (r *userRepository) Create(ctx context.Context, userIn *service.User) error exec := r.sql txClient := r.client var sqlTx *sql.Tx - var txClientClose func() error if r.begin != nil { var err error @@ -50,12 +49,11 @@ func (r *userRepository) Create(ctx context.Context, userIn *service.User) error } exec = sqlTx txClient = entClientFromSQLTx(sqlTx) - txClientClose = txClient.Close + // 注意:不能调用 txClient.Close(),因为基于事务的 ent client + // 在 Close() 时会尝试将 ExecQuerier 断言为 *sql.DB,但实际是 *sql.Tx + // 事务的清理通过 sqlTx.Rollback() 和 sqlTx.Commit() 完成 defer func() { _ = sqlTx.Rollback() }() } - if txClientClose != nil { - defer func() { _ = txClientClose() }() - } created, err := txClient.User.Create(). SetEmail(userIn.Email). @@ -126,7 +124,6 @@ func (r *userRepository) Update(ctx context.Context, userIn *service.User) error exec := r.sql txClient := r.client var sqlTx *sql.Tx - var txClientClose func() error if r.begin != nil { var err error @@ -136,12 +133,11 @@ func (r *userRepository) Update(ctx context.Context, userIn *service.User) error } exec = sqlTx txClient = entClientFromSQLTx(sqlTx) - txClientClose = txClient.Close + // 注意:不能调用 txClient.Close(),因为基于事务的 ent client + // 在 Close() 时会尝试将 ExecQuerier 断言为 *sql.DB,但实际是 *sql.Tx + // 事务的清理通过 sqlTx.Rollback() 和 sqlTx.Commit() 完成 defer func() { _ = sqlTx.Rollback() }() } - if txClientClose != nil { - defer func() { _ = txClientClose() }() - } updated, err := txClient.User.UpdateOneID(userIn.ID). SetEmail(userIn.Email).