Saltar al contenido principal
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 →

Notas de la versión 1.0

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 actualizació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)

  • MS SQL Server: options.isolation renombrado a options.isolationLevel — el formato del valor cambió de READ_COMMITTED a READ COMMITTED para que coincida con el tipo IsolationLevel; se agregó el nivel de aislamiento SNAPSHOT (#12231 por @Cprakhar)

  • 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)

  • La propiedad .connection renombrada a .dataSource — la propiedad connection en Driver, QueryRunner, EntityManager, QueryBuilder, EntityMetadata y todas las interfaces de suscriptor *Event se ha renombrado a dataSource; se proporciona un getter obsoleto como puente (#12244, #12245, #12246, #12249 por @pkuczynski)

  • 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)

  • findOneById eliminado — usa findOneBy en su lugar (#12198 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() eliminado — era redundante ya que todas las consultas ejecutadas se registran a través del logger configurado; usa getSql() o getQueryAndParameters() para inspeccionar SQL en su lugar (#12151 por @naorpeled, #12220 por @pkuczynski)

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

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

  • Opción join de find eliminada — usa relations para LEFT JOINs o QueryBuilder para otros tipos de JOIN (#12188 por @pkuczynski)

  • select basado en cadenas eliminado — usa la sintaxis de objeto select: { id: true } en lugar de select: ["id"] (#12214 por @pkuczynski)

  • relations basado en cadenas eliminado — usa la sintaxis de objeto relations: { profile: true } en lugar de relations: ["profile"] (#12215 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)

  • Se eliminó RdbmsSchemaBuilder.renameTables() — método no operativo vacío que nunca se llamó (#12284 por @naorpeled)

Cambios de comportamiento

  • Las relaciones no anulables ahora usan INNER JOIN — las relaciones ManyToOne y las propietarias OneToOne marcadas como nullable: false ahora usan INNER JOIN en lugar de LEFT JOIN, lo que puede excluir filas con claves foráneas huérfanas (#12064 por @pkuczynski)

  • 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

  • Codemod automatizado para migración a v1 — el nuevo paquete @typeorm/codemod automatiza la mayoría de los cambios importantes: ejecuta npx @typeorm/codemod v1 src/ para actualizar importaciones, renombrar APIs, sintaxis de opciones de búsqueda y más (#12233 por @pkuczynski)

  • 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

  • Ahora se eliminan hijos huérfanos en relaciones uno-a-muchos con FK no nula — al guardar relaciones uno-a-muchos con cascada y reemplazar hijos, ahora se eliminan filas huérfanas con FK no nula en lugar de fallar con violación de restricción; filas con FK anulable siguen siendo nulas como antes (#11982 por @naorpeled)

  • Relaciones eager ahora respetan relationLoadStrategy: "query" — las relaciones eager se cargan mediante consultas separadas cuando se establece la estrategia "query", en lugar de usar siempre JOINs (#11326 por @SharkSharp, #12256 por @pkuczynski)

  • 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)

  • Propagación de esquema/base de datos en tablas de unión closure — los ajustes de esquema y base de datos ahora se propagan correctamente a las tablas de unión closure (#12110 por @pkuczynski)

  • 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 init de la CLI — ya no falla cuando package.json no existe (#11947 por @gioboa); el paquete publicado ahora incluye correctamente las devDependencies necesarias para scaffolding (#12281 por @pkuczynski)

  • 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)

  • Validación de condiciones en OrderByorderBy y addOrderBy de QueryBuilder ahora validan los valores de condición en tiempo de ejecución, previniendo inyección a través de expresiones de orden (#12217 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)