Zum Hauptinhalt springen

Release Notes für TypeORM 1.0

Inoffizielle Beta-Übersetzung

Diese Seite wurde von PageTurner AI übersetzt (Beta). Nicht offiziell vom Projekt unterstützt. Fehler gefunden? Problem melden →

TypeORM 1.0 ist ein großes Release, das lange als veraltet markierte APIs entfernt, Plattformanforderungen modernisiert und Dutzende Fehlerbehebungen sowie neue Funktionen aus dem 0.3.x-Zyklus enthält.

Breaking Changes

Detaillierte Upgrade-Anleitungen findest du in der Migrationsanleitung.

Plattformanforderungen

  • Node.js 20+ erforderlich — Unterstützung für Node.js 16 und 18 wurde eingestellt, das JavaScript-Mindestziel ist nun ES2023 (#11382 von @alumni)

  • Buffer-Polyfill entfernt — Für Binärdaten auf Nicht-Node-Plattformen wird nun Uint8Array verwendet; Node.js Buffer (das Uint8Array erweitert) funktioniert wie zuvor (#11935 von @pujux)

  • Glob-Bibliothek ersetztglob wurde durch tinyglobby ersetzt und rimraf entfernt, was weniger Abhängigkeiten bedeutet (#11699 von @alumni)

  • Hashing in natives crypto verschoben — Die Pakete sha.js und uuid wurden durch das native crypto-Modul und crypto.randomUUID() ersetzt (#11864 von @G0maa, #11769 von @mag123c)

Treiberänderungen

  • MySQL / MariaDB: mysql-Paket entfernt — Nur mysql2 wird unterstützt; Die Option connectorPackage wurde entfernt (#11766 von @pkuczynski)

  • MySQL: legacySpatialSupport standardmäßig false — Standardfunktionen ST_GeomFromText/ST_AsText werden nun verwendet (#12083 von @pkuczynski)

  • MySQL: width- und zerofill-Spaltenoptionen entfernt — Diese wurden in MySQL 8.0.17 als veraltet markiert und in MySQL 8.4 entfernt (#12084 von @pkuczynski)

  • SQLite: sqlite3 entfernt, better-sqlite3 ist Standard — Das sqlite3-Paket wird nicht mehr unterstützt; Die Optionen flags und busyTimeout wurden entfernt (#11836 von @pkuczynski)

  • MongoDB: Treiber v7+ erforderlich — Unterstützung für MongoDB Node.js-Treiber v5/v6 wurde eingestellt; stats()-Methode entfernt; Veraltete Verbindungsoptionen entfernt; Interne Typen werden nicht mehr exportiert (#12208 von @naorpeled, #12179 von @pkuczynski, #12120 von @pkuczynski, #12037 von @alumni)

  • MS SQL Server: domain-Verbindungsoption entfernt — verwende stattdessen authentication mit NTLM-Typ (#12135 von @pkuczynski)

  • SAP HANA: Veraltete Verbindungsaliase entfernthanaClientDriver, pool.max, pool.requestTimeout, pool.idleTimeout und andere wurden zugunsten ihrer modernen Entsprechungen entfernt (#12080 von @gioboa)

  • Expo: Legacy-Treiber entfernt — Der veraltete Expo SQLite-Treiber wurde entfernt; verwende Expo SDK v52+ mit der modernen Async-API (#11860 von @G0maa)

  • Redis: Legacy-Client-Support entfernt — Nur der moderne Redis-Client (v4+) wird für das Caching von Abfrageergebnissen unterstützt (#12057 von @G0maa)

Entfernte APIs

  • Connection und ConnectionOptions entfernt — verwende stattdessen DataSource und DataSourceOptions (#12022 von @alumni)

  • ConnectionManager und globale Hilfsfunktionen entferntcreateConnection, getConnection, getManager, getRepository, createQueryBuilder und andere globale Funktionen wurden entfernt (#12098 von @michaelbromley)

  • Globale Funktionen getMongoRepository und getMongoManager entfernt — verwende stattdessen dataSource.getMongoRepository() und dataSource.mongoManager (#12099 von @pkuczynski)

  • DataSource.name entfernt — Benannte Verbindungen waren seit v0.3 veraltet; ConnectionOptionsReader.all() wurde in get() umbenannt (#12136 von @pkuczynski)

  • Unterstützung für TYPEORM_*-Umgebungsvariablen entferntConnectionOptionsEnvReader, ormconfig.env und automatisches dotenv-Laden wurden entfernt (#12134 von @pkuczynski)

  • findByIds entfernt — verwende stattdessen findBy mit dem In-Operator (#12114 von @pkuczynski)

  • Repository.exist() entfernt — verwende stattdessen Repository.exists() (#12131 von @pkuczynski)

  • AbstractRepository, @EntityRepository und getCustomRepository entfernt — verwende stattdessen Repository.extend() (#12096 von @pkuczynski)

  • @RelationCount-Dekorator entfernt — verwende stattdessen @VirtualColumn mit einer Subquery (#12181 von @pkuczynski)

  • IoC-Containersystem entferntuseContainer(), getFromContainer() und zugehörige Typen wurden entfernt (#12180 von @pkuczynski)

  • readonly-Spaltenoption entfernt — verwende stattdessen update: false (#12132 von @pkuczynski)

  • unsigned bei ColumnNumericOptions entfernt — betrifft nur Decimal-/Float-Typen; unsigned für Integer bleibt unverändert (#12133 von @pkuczynski)

  • QueryBuilder: onConflict(), veraltete orUpdate()-Überladung und setNativeParameters() entfernt — verwende stattdessen orIgnore()/orUpdate() mit Array-Signatur und setParameters() (#12090 von @pkuczynski)

  • QueryBuilder: printSql() in logQuery() umbenannt (#12151 von @naorpeled)

  • QueryBuilder: WhereExpression-Typalias entfernt — verwende stattdessen WhereExpressionBuilder (#12097 von @pkuczynski)

  • QueryBuilder: replacePropertyNames() entfernt — es war eine No-Op-Funktion (#12178 von @pkuczynski)

  • Veraltete Sperrmodi entferntpessimistic_partial_write und pessimistic_write_or_fail wurden durch pessimistic_write mit onLocked-Option ersetzt (#12093 von @pkuczynski)

  • QueryRunner.loadedTables und loadedViews entfernt — verwende stattdessen getTables() und getViews() (#12183 von @pkuczynski)

  • MigrationExecutor.getAllMigrations() entfernt — verwende stattdessen getPendingMigrations(), getExecutedMigrations() oder dataSource.migrations (#12142 von @pkuczynski)

  • Statische Methode EntityMetadata.createPropertyPath() entfernt — interne Hilfsfunktion ohne öffentlichen Ersatz (#12141 von @pkuczynski)

  • Interne nativeParameters-Verbindung entfernt aus Treibern und Query Buildern (#12104 von @pkuczynski)

  • Interne Funktion broadcastLoadEventsForAll() entfernt aus Broadcaster (#12137 von @pkuczynski)

  • Interne Funktion DriverUtils.buildColumnAlias() entfernt — verwende stattdessen buildAlias() (#12138 von @pkuczynski)

Verhaltensänderungen

  • invalidWhereValuesBehavior standardmäßig auf throw — Übergabe von null oder undefined in WHERE-Bedingungen löst jetzt einen Fehler aus statt die Eigenschaft stillschweigend zu ignorieren; verwende IsNull() für Null-Matching (#11710 von @naorpeled)

  • invalidWhereValuesBehavior nur für High-Level-APIs — QueryBuilders .where(), .andWhere() und .orWhere() sind nicht mehr von dieser Einstellung betroffen (#11878 von @naorpeled)

Neue Funktionen

Query Builder

  • INSERT INTO ... SELECT FROM ... — Neue valuesFromSelect()-Methode für InsertQueryBuilder zur Datenmigration und Transformationsabfragen (#11896 von @Cprakhar)

  • returning-Option für Update/Upsert — Repository- und Entity-Manager-update()- und upsert()-Methoden unterstützen jetzt returning auf Datenbanken mit RETURNING-Klauseln (#11782 von @naorpeled)

  • ifExists-Parameter für alle Drop-MethodendropColumn, dropIndex, dropPrimaryKey, dropForeignKey, dropUniqueConstraint, dropCheckConstraint, dropExclusionConstraint und ihre Pluralvarianten akzeptieren jetzt ein ifExists-Flag (#12121 von @pkuczynski)

  • Explizites Ressourcenmanagement für QueryRunner — Unterstützt await using-Syntax (TypeScript 5.2+) zur automatischen Bereinigung (#11701 von @alumni)

Treiber

  • PostgreSQL: ADD VALUE für Enum-Änderungen — Beim Hinzufügen neuer Enum-Werte verwendet TypeORM jetzt die einfachere ALTER TYPE ... ADD VALUE-Syntax statt des 4-stufigen Umbenennen-Erstellen-Migrieren-Löschen-Ansatzes, wo möglich (#10956 von @janzipek)

  • PostgreSQL: Zusätzliche Erweiterungen — Neue installExtensions-Option zur Installation zusätzlicher PostgreSQL-Erweiterungen während der Verbindungseinrichtung (#11888 von @Cprakhar)

  • PostgreSQL: Unterstützung partieller Indizes — Fügt Unterstützung für PostgreSQL partielle Indizes hinzu (#11318 von @freePixel)

  • SAP HANA: Sperren in SELECTFOR UPDATE und andere Sperrmodi werden jetzt in SAP HANA-Abfragen unterstützt (#11996 von @alumni)

  • SAP HANA: Tabellenkommentare@Entity({ comment: "..." }) funktioniert jetzt mit SAP HANA (#11939 von @Cprakhar)

  • SAP HANA: Pool-Timeout — Neue maxWaitTimeoutIfPoolExhausted-Option für Connection-Pools (#11868 von @alumni)

  • SQLite: jsonb-Spaltentyp — SQLite unterstützt jetzt den jsonb-Spaltentyp (#11933 von @Cprakhar)

  • React Native: Verschlüsselungsschlüssel — Neue Option zum Übergeben eines Verschlüsselungsschlüssels für React Native SQLite-Datenbanken (#11736 von @HtSpChakradharCholleti)

Persistenz & Upsert

  • Kaskadierendes Trunkieren in clear()Repository.clear() und EntityManager.clear() akzeptieren jetzt { cascade: true }, um TRUNCATE ... CASCADE auf PostgreSQL, CockroachDB und Oracle auszuführen (#11866 von @Cprakhar)

  • Verbesserte Typisierung für increment/decrement — Der Bedingungsparameter verwendet jetzt typsichere Entity-Typen statt any (#11294 von @OSA413)

Spaltentypen & Dekoratoren

  • Deferrierbare Unterstützung für @Exclusion — Ergänzt die bestehende deferrierbare Unterstützung von @Unique und @Index (#11802 von @oGAD31)

Andere Änderungen

  • Verbesserte Fehlerbehandlung für ormconfig — Fehler beim Laden protokollieren jetzt Warnungen statt stillschweigend zu scheitern (#11871 von @Cprakhar)

Fehlerbehebungen

Abfragegenerierung

  • Spaltenalias in orderBy korrekt maskiert — Verhindert SQL-Fehler bei Namenskonflikten mit reservierten Wörtern (#12027 von @Cprakhar)

  • addOrderBy löst Datenbankspaltennamen auf — Die Verwendung des Datenbank-Spaltennamens (z.B. created_at) statt des Eigenschaftsnamens funktioniert jetzt korrekt (#11904 von @smith-xyz)

  • Sortierung von Subquery-Spalten — Behobener Fehler "Cannot get metadata for given alias" bei Sortierung nach Subquery-Spalten (#11343 von @trannhan0810)

  • Reihenfolge von select-Spalten erhaltengetQuery()/getSql() gibt Spalten jetzt in der durch select() und addSelect() festgelegten Reihenfolge zurück (#11902 von @Cprakhar)

  • .update()-Abfragegenerierung korrigiert — Behobene fehlerhafte SQL-Generierung bei Verwendung von QueryBuilder .update() (#11993 von @gioboa)

  • Upsert-SQL-Generierung mit Tabellenalias — Behobene fehlerhafte Spaltenreferenzen in Upsert-Abfragen mit Tabellenvererbung und benutzerdefinierten Schemata (#11915 von @Cprakhar)

  • Limit mit Joins — Behobene falsche Ergebnisse bei Verwendung von skip/take-Paginierung mit Joins (#11987 von @gioboa)

  • Join-Attribute in Klammern — behoben das Parsen von Joins bei Bedingungen mit Klammern (#11218 von @balkrushna)

  • Globale ORDER BY für Aggregatfunktionen deaktiviertrepo.max(), repo.min() etc. erzeugen kein ungültiges SQL mehr mit ORDER BY-Klauseln (#11925 von @Cprakhar)

  • Subqueries für Paginierung enthalten PKs verknüpfter EntitätenleftJoin mit skip/take lädt verknüpfte Entitäten nun korrekt (#11669 von @mag123c)

  • Aliaskürzung mit camelCase — die shorten-Methode verarbeitet camelCase_aliases nun korrekt (#11283 von @OSA413)

Beziehungen & Eager Loading

  • Aliaskollision bei selbstreferenziellen Beziehungen — selbstreferenzielle Beziehungen mit relationLoadStrategy: "query" erzeugen durch Aliaskollision kein fehlerhaftes SQL mehr (#11066 von @campmarc)

  • Eager-Beziehungen nicht doppelt gejoined — explizites Angeben von Eager-Beziehungen in relations verursacht keine doppelten JOINs mehr (#11991 von @veeceey)

  • Speichern mit eager-geladenen Beziehungen — behoben Fehler beim Speichern von Entitäten mit eager-geladenen Beziehungen (#11975 von @gioboa)

  • Spalten mit select: false nicht mehr zurückgegeben — als select: false markierte Spalten werden korrekt aus Abfrageergebnissen ausgeschlossen (#11944 von @gioboa)

  • Subqueries mit joinMapOne-Methoden — behoben fehlerhaftes Verhalten bei Verwendung von Join-Map-Methoden (#11943 von @gioboa)

  • Beziehungs-IDs in verschachtelten eingebetteten Entitäten — behoben TypeError: Cannot set properties of undefined beim Mapping von Beziehungs-IDs in eingebetteten Entitäten (#11942 von @Cprakhar)

  • Aliasbehandlung in RelationIdLoader — nutzt DriverUtils.getAlias, um Alias-Kürzungen durch Datenbanken mit kurzen Bezeichnerlimits zu verhindern (#11228 von @te1)

  • *-to-many in createPropertyPath — entfernte fehlerhafte Fehlerbehandlung, die bestimmte Beziehungskonfigurationen blockierte (#11119 von @ThbltLmr)

Persistenz

  • Upsert mit update: false oder generatedType — Upsert verarbeitet Spalten, die nicht aktualisiert werden sollen, nun korrekt (#12030 von @gioboa)

  • Werttransformatoren für FindOperator-InstanzenApplyValueTransformers transformiert Werte in FindOperator-Instanzen wie In, Between etc. nun korrekt (#11172 von @ZimGil)

  • Soft-Deletion aktualisiert nicht mehr bereits gelöschte ZeilensoftDelete und softRemove überspringen jetzt Zeilen, die bereits soft-gelöscht wurden (#10705 von @hassanmehdi98)

  • Entity-Merge berücksichtigt null-Werte — Beim Zusammenführen in eine Entity werden null-Eigenschaftswerte nicht mehr stillschweigend ignoriert (#11154 von @knoid)

  • Map/Objekt-Vergleich — Fehlerhafte Änderungserkennung für Map- und Objekt-Spaltenwerte behoben (#10990 von @mgohin)

  • Datumstransformer-Änderungserkennung — Falsch-positive Dirty-Erkennung bei Datumstransformern behoben (#11963 von @gioboa)

  • Child-mpath-Aktualisierung — Der mpath von Baum-Entities wird nun korrekt aktualisiert, auch bei Neuzuordnung mit soft-gelöschten Eltern (#10844 von @JoseCToscano)

  • Handhabung virtueller Eigenschaften im Schema Builder — Der Schema Builder versucht nicht mehr, Spalten für virtuelle Eigenschaften zu erstellen (#11000 von @skyran1278)

  • Entfernen namenloser TableForeignKey — Das Löschen eines Fremdschlüssels ohne expliziten Namen führt nicht mehr zu Fehlern (#10744 von @taichunmin)

  • getPendingMigrations erstellt keine Migrationstabelle mehr — Die Überprüfung ausstehender Migrationen hat nun keine Nebeneffekte mehr (#11672 von @pkuczynski)

Driver-spezifische Korrekturen

  • PostgreSQL: timestamptz-Persistenz/Hydration — Spalten vom Typ timestamp with time zone werden nun korrekt gespeichert und hydriert (#11774 von @Minishlink)

  • PostgreSQL: Geometrietypen-Neuspeicherung — Punkt-/Kreiswerte werden beim Speichern normalisiert, um Fehler beim erneuten Speichern hydrierter Objekte zu vermeiden (#11857 von @Cprakhar)

  • PostgreSQL/CockroachDB: Tabellen mit Anführungszeichen — Handhabung von Tabellen mit Sonderzeichen in Namen korrigiert (#10993 von @iskalyakin)

  • PostgreSQL: Sequentielle Abfrageausführung — Abfragen werden nun sequenziell auf derselben Verbindung ausgeführt, um pg-Deprecation-Warnungen zu vermeiden (#12105 von @pkuczynski)

  • MySQL: PolarDB-X 2.0-VersionserkennunggetVersion() liefert für PolarDB-X 2.0 nicht mehr undefined zurück (#11837 von @Missna)

  • MongoDB: ObjectIdColumn-EigenschaftsnamensübersetzungfindOneBy({ id: value }) übersetzt nun korrekt zu _id in MongoDB-Abfragen (#12200 von @pkuczynski)

  • MongoDB: eingebettete Arrays verschachtelter Dokumente — verarbeitet korrekt eingebettete Arrays innerhalb verschachtelter Dokumentstrukturen (#10940 von @mciuchitu)

  • SQLite: simple-enum-Arrayssimple-enum-Spalten mit array: true führen nicht mehr zu CHECK-Constraint-Fehlern (#11865 von @Cprakhar)

  • SAP HANA: Escaping von Date-Parametern — JS-Date-Werte werden nun als Query-Parameter übergeben statt in SQL-Strings eingebettet (#11867 von @alumni)

  • CockroachDB: strukturierte Abfrageergebnisse bei Transaktionswiederholung — das useStructuredResult-Flag bleibt während CockroachDB-Transaktionswiederholungen jetzt erhalten (#11861 von @naorpeled)

  • Cordova: betroffene Zeilen in Queries — Abfrageergebnisse enthalten jetzt die Anzahl der betroffenen Zeilen (#10873 von @jacobg)

Andere Änderungen

  • CLI-Befehl init — stürzt nicht mehr ab, wenn package.json nicht existiert (#11947 von @gioboa)

  • Deno process-Import — korrigierter falscher Import für die process-Abhängigkeit in Deno (#11248 von @yohannpoli)

Sicherheitskorrekturen

  • SQL-Injection-Prävention — parametrisierte Queries und escapede Bezeichner werden jetzt in allen Treibern für Schema-Introspection und DDL-Methoden verwendet, was SQL-Injection über Datenbank-/Schema-/Tabellen-/Spaltennamen verhindert (#12207 von @pkuczynski, #12197 von @pkuczynski, #12185 von @pkuczynski)

Performance-Verbesserungen

  • PostgreSQL / CockroachDB: gebündeltes DROP in clearDatabase() — konsolidiert einzelne DROP-Befehle zu gebündelten Queries, was die Roundtrips während Test-Setups signifikant reduziert (#12164, #12159 von @pkuczynski)