Notas de la versión TypeORM 1.0
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 usaUint8Arraypara datos binarios en plataformas que no son Node.js;Bufferde Node.js (que extiendeUint8Array) sigue funcionando como antes (#11935 por @pujux) -
Se reemplazó la librería Glob —
globha sido reemplazada portinyglobbyyrimrafse ha eliminado, reduciendo las dependencias (#11699 por @alumni) -
Hashing migrado al
cryptonativo — los paquetessha.jsyuuidse han reemplazado con el módulo nativocryptoycrypto.randomUUID()(#11864 por @G0maa, #11769 por @mag123c)
Cambios en controladores
-
MySQL / MariaDB: se eliminó el paquete
mysql— solo se soportamysql2; se ha eliminado la opciónconnectorPackage(#11766 por @pkuczynski) -
MySQL:
legacySpatialSupportahora tienefalsepor defecto — por defecto se usan las funciones estándarST_GeomFromText/ST_AsText(#12083 por @pkuczynski) -
MySQL: se eliminaron las opciones de columna
widthyzerofill— estas fueron marcadas como obsoletas en MySQL 8.0.17 y eliminadas en MySQL 8.4 (#12084 por @pkuczynski) -
SQLite: se eliminó
sqlite3,better-sqlite3es ahora el predeterminado — el paquetesqlite3ya no es compatible; se eliminaron las opcionesflagsybusyTimeout(#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
domaineliminada — usaauthenticationcon tipo NTLM en su lugar (#12135 por @pkuczynski) -
SAP HANA: alias de conexión obsoletos eliminados —
hanaClientDriver,pool.max,pool.requestTimeout,pool.idleTimeouty 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
-
ConnectionyConnectionOptionseliminados — usaDataSourceyDataSourceOptionsen su lugar (#12022 por @alumni) -
ConnectionManagery funciones globales de conveniencia eliminadas —createConnection,getConnection,getManager,getRepository,createQueryBuildery otras funciones globales se han eliminado (#12098 por @michaelbromley) -
Funciones globales
getMongoRepositoryygetMongoManagereliminadas — usadataSource.getMongoRepository()ydataSource.mongoManageren su lugar (#12099 por @pkuczynski) -
DataSource.nameeliminado — las conexiones con nombre quedaron obsoletas en v0.3;ConnectionOptionsReader.all()renombrado aget()(#12136 por @pkuczynski) -
Compatibilidad con variables de entorno
TYPEORM_*eliminada — se han eliminadoConnectionOptionsEnvReader,ormconfig.envy la carga automática dedotenv(#12134 por @pkuczynski) -
findByIdseliminado — usafindBycon el operadorInen su lugar (#12114 por @pkuczynski) -
Repository.exist()eliminado — usaRepository.exists()en su lugar (#12131 por @pkuczynski) -
AbstractRepository,@EntityRepositoryygetCustomRepositoryeliminados — usaRepository.extend()en su lugar (#12096 por @pkuczynski) -
Decorador
@RelationCounteliminado — usa@VirtualColumncon 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
readonlyeliminada — usaupdate: falseen su lugar (#12132 por @pkuczynski) -
unsignedenColumnNumericOptionseliminado — solo afecta a tipos decimales/flotantes; elunsignedpara enteros no ha cambiado (#12133 por @pkuczynski) -
QueryBuilder: eliminados
onConflict(), la sobrecarga obsoleta deorUpdate()ysetNativeParameters()— usa la firma de array deorIgnore()/orUpdate()ysetParameters()en su lugar (#12090 por @pkuczynski) -
QueryBuilder:
printSql()renombrado alogQuery()(#12151 por @naorpeled) -
QueryBuilder: alias de tipo
WhereExpressioneliminado — usaWhereExpressionBuilderen su lugar (#12097 por @pkuczynski) -
QueryBuilder: eliminado
replacePropertyNames()— no tenía efecto (#12178 por @pkuczynski) -
Modos de bloqueo obsoletos eliminados —
pessimistic_partial_writeypessimistic_write_or_failse han reemplazado porpessimistic_writecon la opciónonLocked(#12093 por @pkuczynski) -
Eliminados
QueryRunner.loadedTablesyloadedViews— usagetTables()ygetViews()en su lugar (#12183 por @pkuczynski) -
Eliminado
MigrationExecutor.getAllMigrations()— usagetPendingMigrations(),getExecutedMigrations()odataSource.migrationsen 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
nativeParametersde 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()— usabuildAlias()en su lugar (#12138 por @pkuczynski)
Cambios de comportamiento
-
invalidWhereValuesBehaviorpor defecto esthrow— pasarnulloundefineden condiciones where ahora lanza un error en lugar de ignorar silenciosamente la propiedad; usaIsNull()para coincidencias con null (#11710 por @naorpeled) -
invalidWhereValuesBehaviorlimitado 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étodovaluesFromSelect()enInsertQueryBuilderpara migración de datos y consultas de transformación (#11896 por @Cprakhar) -
Opción
returningpara update/upsert — los métodosupdate()yupsert()del repositorio y del entity manager ahora admiten una opciónreturningen bases de datos que soportan cláusulasRETURNING(#11782 por @naorpeled) -
Parámetro
ifExistsen todos los métodos drop —dropColumn,dropIndex,dropPrimaryKey,dropForeignKey,dropUniqueConstraint,dropCheckConstraint,dropExclusionConstrainty sus variantes plurales ahora aceptan una banderaifExists(#12121 por @pkuczynski) -
Gestión explícita de recursos para
QueryRunner— soporta sintaxisawait using(TypeScript 5.2+) para limpieza automática (#11701 por @alumni)
Controladores
-
PostgreSQL:
ADD VALUEpara cambios en enums — al añadir nuevos valores enum, TypeORM ahora usa la sintaxis más simpleALTER TYPE ... ADD VALUEen lugar del enfoque de 4 pasos (renombrar-crear-migrar-eliminar), cuando es posible (#10956 por @janzipek) -
PostgreSQL: extensiones adicionales — nueva opción
installExtensionspara 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 SELECT —
FOR UPDATEy 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 columnajsonb(#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()yEntityManager.clear()ahora aceptan{ cascade: true }para ejecutarTRUNCATE ... CASCADEen 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 deany(#11294 por @OSA413)
Tipos de columna y Decoradores
- Soporte deferrable en
@Exclusion— replica el soporte deferrable existente en@Uniquee@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) -
addOrderByresuelve 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
selectpreservado —getQuery()/getSql()ahora devuelve columnas en el orden añadido medianteselect()yaddSelect()(#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/takecon 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 BYglobal para funciones de agregación —repo.max(),repo.min(), etc. ya no generan SQL inválido con cláusulasORDER BY(#11925 por @Cprakhar) -
Subconsulta de paginación incluye PKs de entidades unidas —
leftJoinconskip/takeahora carga correctamente entidades relacionadas (#11669 por @mag123c) -
Acortamiento de alias con camelCase — el método
shortenahora maneja correctamentecamelCase_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
relationsya 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: falseya no se devuelven — columnas marcadas conselect: falseahora 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 undefinedal mapear IDs de relación dentro de entidades embebidas (#11942 por @Cprakhar) -
Manejo de alias en
RelationIdLoader— usaDriverUtils.getAliaspara evitar truncamiento en bases de datos con límites de identificadores cortos (#11228 por @te1) -
Relaciones
*-to-manyencreatePropertyPath— eliminado manejo de errores incorrecto que impedía ciertas configuraciones de relaciones (#11119 por @ThbltLmr)
Persistencia
-
Upsert con
update: falseogeneratedType— upsert ahora maneja correctamente columnas que no deben actualizarse (#12030 por @gioboa) -
Transformadores aplicados a
FindOperators —ApplyValueTransformersahora transforma correctamente valores dentro de instanciasFindOperatorcomoIn,Between, etc. (#11172 por @ZimGil) -
La eliminación temporal ya no actualiza filas ya eliminadas —
softDeleteysoftRemoveahora 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 valornull(#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
TableForeignKeysin nombre — ya no falla al eliminar claves foráneas sin nombre explícito (#10744 por @taichunmin) -
getPendingMigrationsya 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— columnastimestamp with time zoneahora 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
pg8.19.0 (#12105 por @pkuczynski) -
MySQL: Detección de versión PolarDB-X 2.0 —
getVersion()ya no devuelveundefinedpara PolarDB-X 2.0 (#11837 por @Missna) -
MongoDB: Traducción de nombres en
ObjectIdColumn—findOneBy({ id: value })ahora traduce correctamente a_iden 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-enumconarray: trueya no fallan con errores de restricción CHECK (#11865 por @Cprakhar) -
SAP HANA: escapeo de parámetros
Date— los valores JSDateahora 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
useStructuredResultahora 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 cuandopackage.jsonno existe (#11947 por @gioboa) -
Importación
processen Deno — corregida importación incorrecta para la dependenciaprocessen 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)