Saltar al contenido principal

Notas de la versión TypeORM 1.0

Traducción Beta No Oficial

Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →

TypeORM 1.0 es una versión principal que elimina APIs obsoletas desde hace tiempo, moderniza los requisitos de plataforma e incluye docenas de correcciones de errores y nuevas funcionalidades acumuladas durante el ciclo 0.3.x.

Cambios importantes

Consulta la Guía de Migración para instrucciones detalladas de actualización.

Requisitos de plataforma

  • Node.js 20+ requerido — se ha eliminado el soporte para Node.js 16 y 18, y el objetivo mínimo de JavaScript ahora es ES2023 (#11382 por @alumni)

  • Se eliminó el polyfill de Buffer — ahora se usa Uint8Array para datos binarios en plataformas que no son Node.js; Buffer de Node.js (que extiende Uint8Array) sigue funcionando como antes (#11935 por @pujux)

  • Se reemplazó la librería Globglob ha sido reemplazada por tinyglobby y rimraf se ha eliminado, reduciendo las dependencias (#11699 por @alumni)

  • Hashing migrado al crypto nativo — los paquetes sha.js y uuid se han reemplazado con el módulo nativo crypto y crypto.randomUUID() (#11864 por @G0maa, #11769 por @mag123c)

Cambios en controladores

  • MySQL / MariaDB: se eliminó el paquete mysql — solo se soporta mysql2; se ha eliminado la opción connectorPackage (#11766 por @pkuczynski)

  • MySQL: legacySpatialSupport ahora tiene false por defecto — por defecto se usan las funciones estándar ST_GeomFromText/ST_AsText (#12083 por @pkuczynski)

  • MySQL: se eliminaron las opciones de columna width y zerofill — estas fueron marcadas como obsoletas en MySQL 8.0.17 y eliminadas en MySQL 8.4 (#12084 por @pkuczynski)

  • SQLite: se eliminó sqlite3, better-sqlite3 es ahora el predeterminado — el paquete sqlite3 ya no es compatible; se eliminaron las opciones flags y busyTimeout (#11836 por @pkuczynski)

  • MongoDB: se requiere driver v7+ — se eliminó el soporte para drivers MongoDB Node.js v5/v6; se eliminó el método stats(); se quitaron opciones de conexión obsoletas; ya no se exportan tipos internos (#12208 por @naorpeled, #12179 por @pkuczynski, #12120 por @pkuczynski, #12037 por @alumni)

  • MS SQL Server: opción de conexión domain eliminada — usa authentication con tipo NTLM en su lugar (#12135 por @pkuczynski)

  • SAP HANA: alias de conexión obsoletos eliminadoshanaClientDriver, pool.max, pool.requestTimeout, pool.idleTimeout y otros se han eliminado en favor de sus equivalentes modernos (#12080 por @gioboa)

  • Expo: controlador heredado eliminado — se ha eliminado el controlador SQLite heredado de Expo; usa Expo SDK v52+ con la API asíncrona moderna (#11860 por @G0maa)

  • Redis: compatibilidad con cliente heredado eliminada — solo se admite el cliente Redis moderno (v4+) para el almacenamiento en caché de resultados de consultas (#12057 por @G0maa)

APIs eliminadas

  • Connection y ConnectionOptions eliminados — usa DataSource y DataSourceOptions en su lugar (#12022 por @alumni)

  • ConnectionManager y funciones globales de conveniencia eliminadascreateConnection, getConnection, getManager, getRepository, createQueryBuilder y otras funciones globales se han eliminado (#12098 por @michaelbromley)

  • Funciones globales getMongoRepository y getMongoManager eliminadas — usa dataSource.getMongoRepository() y dataSource.mongoManager en su lugar (#12099 por @pkuczynski)

  • DataSource.name eliminado — las conexiones con nombre quedaron obsoletas en v0.3; ConnectionOptionsReader.all() renombrado a get() (#12136 por @pkuczynski)

  • Compatibilidad con variables de entorno TYPEORM_* eliminada — se han eliminado ConnectionOptionsEnvReader, ormconfig.env y la carga automática de dotenv (#12134 por @pkuczynski)

  • findByIds eliminado — usa findBy con el operador In en su lugar (#12114 por @pkuczynski)

  • Repository.exist() eliminado — usa Repository.exists() en su lugar (#12131 por @pkuczynski)

  • AbstractRepository, @EntityRepository y getCustomRepository eliminados — usa Repository.extend() en su lugar (#12096 por @pkuczynski)

  • Decorador @RelationCount eliminado — usa @VirtualColumn con una subconsulta en su lugar (#12181 por @pkuczynski)

  • Sistema de contenedor IoC eliminado — se han eliminado useContainer(), getFromContainer() y los tipos relacionados (#12180 por @pkuczynski)

  • Opción de columna readonly eliminada — usa update: false en su lugar (#12132 por @pkuczynski)

  • unsigned en ColumnNumericOptions eliminado — solo afecta a tipos decimales/flotantes; el unsigned para enteros no ha cambiado (#12133 por @pkuczynski)

  • QueryBuilder: eliminados onConflict(), la sobrecarga obsoleta de orUpdate() y setNativeParameters() — usa la firma de array de orIgnore()/orUpdate() y setParameters() en su lugar (#12090 por @pkuczynski)

  • QueryBuilder: printSql() renombrado a logQuery() (#12151 por @naorpeled)

  • QueryBuilder: alias de tipo WhereExpression eliminado — usa WhereExpressionBuilder en su lugar (#12097 por @pkuczynski)

  • QueryBuilder: eliminado replacePropertyNames() — no tenía efecto (#12178 por @pkuczynski)

  • Modos de bloqueo obsoletos eliminadospessimistic_partial_write y pessimistic_write_or_fail se han reemplazado por pessimistic_write con la opción onLocked (#12093 por @pkuczynski)

  • Eliminados QueryRunner.loadedTables y loadedViews — usa getTables() y getViews() en su lugar (#12183 por @pkuczynski)

  • Eliminado MigrationExecutor.getAllMigrations() — usa getPendingMigrations(), getExecutedMigrations() o dataSource.migrations en su lugar (#12142 por @pkuczynski)

  • Eliminado el método estático EntityMetadata.createPropertyPath() — utilidad interna sin reemplazo público (#12141 por @pkuczynski)

  • Eliminada la infraestructura interna nativeParameters de los drivers y los query builders (#12104 por @pkuczynski)

  • Eliminada la función interna broadcastLoadEventsForAll() de Broadcaster (#12137 por @pkuczynski)

  • Eliminada la función interna DriverUtils.buildColumnAlias() — usa buildAlias() en su lugar (#12138 por @pkuczynski)

Cambios de comportamiento

  • invalidWhereValuesBehavior por defecto es throw — pasar null o undefined en condiciones where ahora lanza un error en lugar de ignorar silenciosamente la propiedad; usa IsNull() para coincidencias con null (#11710 por @naorpeled)

  • invalidWhereValuesBehavior limitado solo a APIs de alto nivel.where(), .andWhere(), .orWhere() de QueryBuilder ya no se ven afectados por esta configuración (#11878 por @naorpeled)

Nuevas características

Query Builder

  • INSERT INTO ... SELECT FROM ... — nuevo método valuesFromSelect() en InsertQueryBuilder para migración de datos y consultas de transformación (#11896 por @Cprakhar)

  • Opción returning para update/upsert — los métodos update() y upsert() del repositorio y del entity manager ahora admiten una opción returning en bases de datos que soportan cláusulas RETURNING (#11782 por @naorpeled)

  • Parámetro ifExists en todos los métodos dropdropColumn, dropIndex, dropPrimaryKey, dropForeignKey, dropUniqueConstraint, dropCheckConstraint, dropExclusionConstraint y sus variantes plurales ahora aceptan una bandera ifExists (#12121 por @pkuczynski)

  • Gestión explícita de recursos para QueryRunner — soporta sintaxis await using (TypeScript 5.2+) para limpieza automática (#11701 por @alumni)

Controladores

  • PostgreSQL: ADD VALUE para cambios en enums — al añadir nuevos valores enum, TypeORM ahora usa la sintaxis más simple ALTER TYPE ... ADD VALUE en lugar del enfoque de 4 pasos (renombrar-crear-migrar-eliminar), cuando es posible (#10956 por @janzipek)

  • PostgreSQL: extensiones adicionales — nueva opción installExtensions para instalar extensiones PostgreSQL adicionales durante la configuración de conexión (#11888 por @Cprakhar)

  • PostgreSQL: soporte para índices parciales — añade soporte para índices parciales de PostgreSQL (#11318 por @freePixel)

  • SAP HANA: bloqueos en SELECTFOR UPDATE y otros modos de bloqueo ahora son compatibles en consultas SAP HANA (#11996 por @alumni)

  • SAP HANA: comentarios en tablas@Entity({ comment: "..." }) ahora funciona con SAP HANA (#11939 por @Cprakhar)

  • SAP HANA: tiempo de espera del pool — nueva opción de pool maxWaitTimeoutIfPoolExhausted (#11868 por @alumni)

  • SQLite: tipo de columna jsonb — SQLite ahora admite el tipo de columna jsonb (#11933 por @Cprakhar)

  • React Native: clave de cifrado — nueva opción para pasar una clave de cifrado en bases de datos SQLite para React Native (#11736 por @HtSpChakradharCholleti)

Persistencia y Upsert

  • Truncado en cascada en clear()Repository.clear() y EntityManager.clear() ahora aceptan { cascade: true } para ejecutar TRUNCATE ... CASCADE en PostgreSQL, CockroachDB y Oracle (#11866 por @Cprakhar)

  • Mejor tipado para increment/decrement — el parámetro de condiciones ahora usa tipos conscientes de la entidad en lugar de any (#11294 por @OSA413)

Tipos de columna y Decoradores

  • Soporte deferrable en @Exclusion — replica el soporte deferrable existente en @Unique e @Index (#11802 por @oGAD31)

Otros

  • Manejo mejorado de errores en ormconfig — los fallos de carga ahora registran advertencias en lugar de fallar silenciosamente (#11871 por @Cprakhar)

Correcciones de errores

Generación de consultas

  • Alias de columna escapado correctamente en orderBy — evita errores SQL cuando nombres de alias entran en conflicto con palabras reservadas (#12027 por @Cprakhar)

  • addOrderBy resuelve nombres de columnas de base de datos — usar el nombre de columna de la base de datos (ej. created_at) en lugar del nombre de propiedad ahora funciona correctamente (#11904 por @smith-xyz)

  • Resolución de columnas en subconsultas de ordenamiento — corregido el error "Cannot get metadata for given alias" al ordenar por columnas de subconsultas (#11343 por @trannhan0810)

  • Orden de columnas en select preservadogetQuery()/getSql() ahora devuelve columnas en el orden añadido mediante select() y addSelect() (#11902 por @Cprakhar)

  • Generación de consultas .update() corregida — solucionada generación SQL incorrecta al usar .update() en QueryBuilder (#11993 por @gioboa)

  • Generación SQL de Upsert con alias de tabla — corregidas referencias incorrectas a columnas en consultas upsert con herencia de tablas y esquemas personalizados (#11915 por @Cprakhar)

  • Límite con joins — corregidos resultados incorrectos al usar paginación skip/take con joins (#11987 por @gioboa)

  • Atributos de unión dentro de corchetes — corregido el análisis de unión cuando las condiciones contienen corchetes (#11218 por @balkrushna)

  • Deshabilitar ORDER BY global para funciones de agregaciónrepo.max(), repo.min(), etc. ya no generan SQL inválido con cláusulas ORDER BY (#11925 por @Cprakhar)

  • Subconsulta de paginación incluye PKs de entidades unidasleftJoin con skip/take ahora carga correctamente entidades relacionadas (#11669 por @mag123c)

  • Acortamiento de alias con camelCase — el método shorten ahora maneja correctamente camelCase_aliases (#11283 por @OSA413)

Relaciones y carga eager

  • Colisión de alias en relaciones autorreferenciales — relaciones autorreferenciales con relationLoadStrategy: "query" ya no generan SQL incorrecto por colisión de alias (#11066 por @campmarc)

  • Relaciones eager no se unen dos veces — especificar explícitamente una relación eager en relations ya no causa JOINs duplicados (#11991 por @veeceey)

  • Guardar con relaciones cargadas eager — corregido fallos al guardar cuando una entidad tiene relaciones cargadas eager (#11975 por @gioboa)

  • Columnas con select: false ya no se devuelven — columnas marcadas con select: false ahora se excluyen correctamente de los resultados (#11944 por @gioboa)

  • Subconsulta con métodos joinMapOne — corregido comportamiento incorrecto al usar métodos de mapa de unión (#11943 por @gioboa)

  • IDs de relación en entidades embebidas anidadas — corregido TypeError: Cannot set properties of undefined al mapear IDs de relación dentro de entidades embebidas (#11942 por @Cprakhar)

  • Manejo de alias en RelationIdLoader — usa DriverUtils.getAlias para evitar truncamiento en bases de datos con límites de identificadores cortos (#11228 por @te1)

  • Relaciones *-to-many en createPropertyPath — eliminado manejo de errores incorrecto que impedía ciertas configuraciones de relaciones (#11119 por @ThbltLmr)

Persistencia

  • Upsert con update: false o generatedType — upsert ahora maneja correctamente columnas que no deben actualizarse (#12030 por @gioboa)

  • Transformadores aplicados a FindOperatorsApplyValueTransformers ahora transforma correctamente valores dentro de instancias FindOperator como In, Between, etc. (#11172 por @ZimGil)

  • La eliminación temporal ya no actualiza filas ya eliminadassoftDelete y softRemove ahora omiten filas previamente marcadas como eliminadas temporalmente (#10705 por @hassanmehdi98)

  • La fusión de entidades respeta valores null — al combinar entidades, ya no se ignoran silenciosamente las propiedades con valor null (#11154 por @knoid)

  • Comparación de Map/objeto — corregida detección incorrecta de cambios en valores de columna tipo Map u objeto plano (#10990 por @mgohin)

  • Detección de cambios en transformadores de fecha — solucionados falsos positivos al detectar modificaciones con transformadores de valores de fecha (#11963 por @gioboa)

  • Actualización de mpath en hijos — corregida actualización del mpath en entidades árbol al cambiar padre, incluso con padres eliminados temporalmente (#10844 por @JoseCToscano)

  • Manejo de propiedades virtuales en el constructor de esquemas — ya no intenta crear columnas para propiedades virtuales (#11000 por @skyran1278)

  • Eliminación de TableForeignKey sin nombre — ya no falla al eliminar claves foráneas sin nombre explícito (#10744 por @taichunmin)

  • getPendingMigrations ya no crea la tabla de migraciones — verificar migraciones pendientes ya no tiene efectos secundarios (#11672 por @pkuczynski)

Correcciones específicas del controlador

  • PostgreSQL: Persistencia/hidratación de timestamptz — columnas timestamp with time zone ahora funcionan correctamente (#11774 por @Minishlink)

  • PostgreSQL: Reguardado de tipos geométricos — valores point/circle se normalizan al persistir para evitar errores al reguardar objetos hidratados (#11857 por @Cprakhar)

  • PostgreSQL/CockroachDB: Tablas con nombres entrecomillados — corregido manejo de tablas con caracteres especiales en nombres (#10993 por @iskalyakin)

  • PostgreSQL: Ejecución secuencial de consultas — ahora se ejecutan secuencialmente en la misma conexión para evitar advertencias en pg 8.19.0 (#12105 por @pkuczynski)

  • MySQL: Detección de versión PolarDB-X 2.0getVersion() ya no devuelve undefined para PolarDB-X 2.0 (#11837 por @Missna)

  • MongoDB: Traducción de nombres en ObjectIdColumnfindOneBy({ id: value }) ahora traduce correctamente a _id en consultas (#12200 por @pkuczynski)

  • MongoDB: arreglos de documentos anidados incrustados — procesa correctamente arreglos incrustados dentro de estructuras de documentos anidados (#10940 por @mciuchitu)

  • SQLite: arreglos de enumeraciones simples — las columnas simple-enum con array: true ya no fallan con errores de restricción CHECK (#11865 por @Cprakhar)

  • SAP HANA: escapeo de parámetros Date — los valores JS Date ahora se pasan como parámetros de consulta en lugar de incrustarse en cadenas SQL (#11867 por @alumni)

  • CockroachDB: resultados estructurados en reintentos de transacciones — la bandera useStructuredResult ahora se preserva durante la reproducción de reintentos de transacciones en CockroachDB (#11861 por @naorpeled)

  • Cordova: filas afectadas en consultas — los resultados de consultas ahora incluyen el conteo de filas afectadas (#10873 por @jacobg)

Otros

  • Comando CLI init — ya no falla cuando package.json no existe (#11947 por @gioboa)

  • Importación process en Deno — corregida importación incorrecta para la dependencia process en Deno (#11248 por @yohannpoli)

Correcciones de seguridad

  • Prevención de inyección SQL — ahora se utilizan consultas parametrizadas e identificadores escapados en todos los controladores para introspección de esquemas y métodos DDL, previniendo inyección SQL mediante nombres de bases de datos/esquemas/tablas/columnas (#12207 por @pkuczynski, #12197 por @pkuczynski, #12185 por @pkuczynski)

Mejoras de rendimiento

  • PostgreSQL / CockroachDB: DROP agrupado en clearDatabase() — consolida declaraciones DROP individuales en consultas agrupadas, reduciendo significativamente los viajes de ida y vuelta durante la configuración de pruebas (#12164, #12159 por @pkuczynski)