Note di rilascio di TypeORM 1.0
Questa pagina è stata tradotta da PageTurner AI (beta). Non ufficialmente approvata dal progetto. Hai trovato un errore? Segnala problema →
TypeORM 1.0 è una release importante che rimuove API deprecate da tempo, modernizza i requisiti di piattaforma e include decine di correzioni di bug e nuove funzionalità accumulate durante il ciclo 0.3.x.
Modifiche incompatibili
Consulta la Guida alla migrazione per istruzioni dettagliate sull'aggiornamento.
Requisiti di piattaforma
-
Node.js 20+ obbligatorio — il supporto per Node.js 16 e 18 è stato rimosso e il target JavaScript minimo è ora ES2023 (#11382 di @alumni)
-
Polyfill
Bufferrimosso — ora viene utilizzatoUint8Arrayper i dati binari su piattaforme non Node;Bufferdi Node.js (che estendeUint8Array) continua a funzionare come prima (#11935 di @pujux) -
Libreria Glob sostituita —
globè stato sostituito continyglobbyerimrafè stato rimosso, riducendo le dipendenze (#11699 di @alumni) -
Hashing spostato su
cryptonativo — i pacchettisha.jseuuidsono stati sostituiti con il modulo nativocryptoecrypto.randomUUID()(#11864 di @G0maa, #11769 di @mag123c)
Modifiche ai driver
-
MySQL / MariaDB: pacchetto
mysqlrimosso — è supportato solomysql2; l'opzioneconnectorPackageè stata eliminata (#11766 di @pkuczynski) -
MySQL:
legacySpatialSupportora èfalsedi default — vengono usate per impostazione predefinita le funzioni standardST_GeomFromText/ST_AsText(#12083 di @pkuczynski) -
MySQL: opzioni colonna
widthezerofillrimosse — deprecate in MySQL 8.0.17 e rimosse in MySQL 8.4 (#12084 di @pkuczynski) -
SQLite:
sqlite3rimosso,better-sqlite3è il default — il pacchettosqlite3non è più supportato; le opzioniflagsebusyTimeoutsono state rimosse (#11836 di @pkuczynski) -
MongoDB: driver v7+ obbligatorio — il supporto per MongoDB Node.js driver v5/v6 è stato rimosso; metodo
stats()eliminato; opzioni di connessione deprecate rimosse; i tipi interni non sono più esportati (#12208 di @naorpeled, #12179 di @pkuczynski, #12120 di @pkuczynski, #12037 di @alumni) -
MS SQL Server: opzione
domainrimossa — usaauthenticationcon tipo NTLM al suo posto (#12135 di @pkuczynski) -
SAP HANA: alias di connessione deprecati rimossi —
hanaClientDriver,pool.max,pool.requestTimeout,pool.idleTimeoute altri sono stati rimossi a favore delle loro controparti moderne (#12080 di @gioboa) -
Expo: driver legacy rimosso — il vecchio driver SQLite per Expo è stato rimosso; usa Expo SDK v52+ con la moderna API asincrona (#11860 di @G0maa)
-
Redis: supporto client legacy rimosso — è supportato solo il client Redis moderno (v4+) per la cache dei risultati delle query (#12057 di @G0maa)
API rimosse
-
ConnectioneConnectionOptionsrimossi — usaDataSourceeDataSourceOptionsal loro posto (#12022 di @alumni) -
ConnectionManagere funzioni globali rimosse —createConnection,getConnection,getManager,getRepository,createQueryBuildere altre funzioni globali sono state rimosse (#12098 di @michaelbromley) -
Funzioni globali
getMongoRepositoryegetMongoManagerrimosse — usadataSource.getMongoRepository()edataSource.mongoManageral loro posto (#12099 di @pkuczynski) -
DataSource.namerimosso — le connessioni nominate erano deprecate in v0.3;ConnectionOptionsReader.all()rinominato inget()(#12136 di @pkuczynski) -
Supporto variabili d'ambiente
TYPEORM_*rimosso —ConnectionOptionsEnvReader,ormconfig.enve il caricamento automatico didotenvsono stati rimossi (#12134 di @pkuczynski) -
findByIdsrimosso — usafindBycon l'operatoreInal suo posto (#12114 di @pkuczynski) -
Repository.exist()rimosso — usaRepository.exists()al suo posto (#12131 di @pkuczynski) -
AbstractRepository,@EntityRepositoryegetCustomRepositoryrimossi — usaRepository.extend()al loro posto (#12096 di @pkuczynski) -
Decoratore
@RelationCountrimosso — usa@VirtualColumncon una sotto-query al suo posto (#12181 di @pkuczynski) -
Rimosso il sistema di container IoC —
useContainer(),getFromContainer()e i tipi correlati sono stati rimossi (#12180 by @pkuczynski) -
Rimossa l'opzione di colonna
readonly— usa inveceupdate: false(#12132 by @pkuczynski) -
Rimosso
unsigneddaColumnNumericOptions— riguarda solo i tipi decimali/float;unsignedper gli integer rimane invariato (#12133 by @pkuczynski) -
QueryBuilder: rimossi
onConflict(), l'overload deprecato diorUpdate()esetNativeParameters()— usa inveceorIgnore()/orUpdate()con firma ad array esetParameters()(#12090 by @pkuczynski) -
QueryBuilder:
printSql()rinominato inlogQuery()(#12151 by @naorpeled) -
QueryBuilder: rimosso l'alias di tipo
WhereExpression— usa inveceWhereExpressionBuilder(#12097 by @pkuczynski) -
QueryBuilder: rimosso
replacePropertyNames()— era una no-op (#12178 by @pkuczynski) -
Rimossi i lock mode deprecati —
pessimistic_partial_writeepessimistic_write_or_failsostituiti dapessimistic_writecon opzioneonLocked(#12093 by @pkuczynski) -
Rimossi
QueryRunner.loadedTableseloadedViews— usa invecegetTables()egetViews()(#12183 by @pkuczynski) -
Rimosso
MigrationExecutor.getAllMigrations()— usa invecegetPendingMigrations(),getExecutedMigrations()odataSource.migrations(#12142 by @pkuczynski) -
Rimossa la funzione statica
EntityMetadata.createPropertyPath()— utility interna senza sostituto pubblico (#12141 by @pkuczynski) -
Rimossa la gestione interna di
nativeParametersda driver e query builder (#12104 by @pkuczynski) -
Rimossa la funzione interna
broadcastLoadEventsForAll()da Broadcaster (#12137 by @pkuczynski) -
Rimossa la funzione interna
DriverUtils.buildColumnAlias()— usa invecebuildAlias()(#12138 by @pkuczynski)
Modifiche comportamentali
-
invalidWhereValuesBehaviorè ora impostato di default suthrow— passarenulloundefinednelle condizioni where ora genera un errore invece di ignorare silenziosamente la proprietà; usaIsNull()per i match con null (#11710 di @naorpeled) -
invalidWhereValuesBehaviorlimitato solo alle API di alto livello — i metodi.where(),.andWhere(),.orWhere()di QueryBuilder non sono più influenzati da questa impostazione (#11878 di @naorpeled)
Nuove funzionalità
Query Builder
-
INSERT INTO ... SELECT FROM ...— nuovo metodovaluesFromSelect()suInsertQueryBuilderper query di migrazione e trasformazione dati (#11896 di @Cprakhar) -
Opzione
returningper update/upsert — i metodiupdate()eupsert()di repository e entity manager ora supportano l'opzionereturningsui database che supportano le clausoleRETURNING(#11782 di @naorpeled) -
Parametro
ifExistssu tutti i metodi di drop —dropColumn,dropIndex,dropPrimaryKey,dropForeignKey,dropUniqueConstraint,dropCheckConstraint,dropExclusionConstrainte le loro varianti plurali ora accettano un flagifExists(#12121 di @pkuczynski) -
Gestione esplicita delle risorse per
QueryRunner— supporta la sintassiawait using(TypeScript 5.2+) per la pulizia automatica (#11701 di @alumni)
Driver
-
PostgreSQL:
ADD VALUEper modifiche agli enum — quando aggiunge nuovi valori enum, TypeORM ora usa la sintassi più sempliceALTER TYPE ... ADD VALUEinvece dell'approccio in 4 passi (rinomina-crea-migra-elimina), quando possibile (#10956 di @janzipek) -
PostgreSQL: estensioni aggiuntive — nuova opzione
installExtensionsper installare estensioni PostgreSQL aggiuntive durante la configurazione della connessione (#11888 di @Cprakhar) -
PostgreSQL: supporto per indici parziali — aggiunto supporto per gli indici parziali di PostgreSQL (#11318 di @freePixel)
-
SAP HANA: locking nelle SELECT —
FOR UPDATEe altri tipi di lock sono ora supportati nelle query SAP HANA (#11996 di @alumni) -
SAP HANA: commenti alle tabelle —
@Entity({ comment: "..." })ora funziona con SAP HANA (#11939 di @Cprakhar) -
SAP HANA: timeout del pool — nuova opzione
maxWaitTimeoutIfPoolExhaustedper il pool (#11868 di @alumni) -
SQLite: tipo di colonna
jsonb— SQLite ora supporta il tipo di colonnajsonb(#11933 di @Cprakhar) -
React Native: chiave di crittografia — nuova opzione per passare una chiave di crittografia per database SQLite in React Native (#11736 di @HtSpChakradharCholleti)
Persistenza & Upsert
-
Troncamento a cascata in
clear()—Repository.clear()eEntityManager.clear()ora accettano{ cascade: true }per eseguireTRUNCATE ... CASCADEsu PostgreSQL, CockroachDB e Oracle (#11866 di @Cprakhar) -
Tipizzazione migliorata per
increment/decrement— il parametro delle condizioni ora utilizza tipi correttamente allineati all'entità invece diany(#11294 di @OSA413)
Tipi di colonne & Decoratori
- Supporto deferrabile su
@Exclusion— specchia il supporto deferrabile già esistente su@Uniquee@Index(#11802 di @oGAD31)
Altro
- Gestione errori migliorata per ormconfig — i fallimenti nel caricamento ora registrano warning invece di fallire silenziosamente (#11871 di @Cprakhar)
Bug fix
Generazione query
-
Alias di colonna correttamente escapato in
orderBy— previene errori SQL quando i nomi alias confliggono con parole riservate (#12027 di @Cprakhar) -
addOrderByrisolve correttamente i nomi delle colonne — usare il nome della colonna del database (es.created_at) invece del nome della proprietà ora funziona correttamente (#11904 di @smith-xyz) -
Risoluzione colonne nelle subquery per l'ordinamento — risolto l'errore "Cannot get metadata for given alias" quando si ordinava per colonne di subquery (#11343 di @trannhan0810)
-
Ordinamento colonne preservato in
select—getQuery()/getSql()ora restituisce le colonne nell'ordine aggiunto tramiteselect()eaddSelect()(#11902 di @Cprakhar) -
Generazione query
.update()corretta — risolto bug nella generazione SQL quando si usa.update()in QueryBuilder (#11993 di @gioboa) -
Generazione SQL upsert con alias di tabella — risolti riferimenti errati alle colonne nelle query upsert con ereditarietà di tabelle e schemi personalizzati (#11915 di @Cprakhar)
-
Limit con join — risolti risultati errati quando si usano paginazione
skip/takecon join (#11987 di @gioboa) -
Attributi di join tra parentesi — risolto il parsing dei join quando le condizioni contengono parentesi (#11218 di @balkrushna)
-
Disabilitato
ORDER BYglobale per funzioni aggregate —repo.max(),repo.min(), ecc. non producono più SQL non valido con clausolaORDER BY(#11925 di @Cprakhar) -
Subquery di paginazione include PK di entità collegate —
leftJoinconskip/takeora carica correttamente le entità correlate (#11669 di @mag123c) -
Accorciamento alias con camelCase — il metodo
shortengestisce correttamentecamelCase_aliases(#11283 di @OSA413)
Relazioni e Caricamento eager
-
Conflitto di alias in relazioni autoreferenziali — relazioni autoreferenziali con
relationLoadStrategy: "query"non producono più SQL errato per conflitti di alias (#11066 di @campmarc) -
Relazioni eager non più unite due volte — specificare esplicitamente relazioni eager in
relationsnon causa più JOIN duplicati (#11991 di @veeceey) -
Salvataggio con relazioni eager caricate — risolti errori durante il salvataggio quando un'entità ha relazioni eager caricate (#11975 di @gioboa)
-
Colonne con
select: falsenon più restituite — colonne contrassegnate conselect: falsesono ora correttamente escluse dai risultati (#11944 di @gioboa) -
Subquery con metodi
joinMapOne— risolto comportamento errato usando metodi di mappatura join (#11943 di @gioboa) -
ID relazione in entità embedded annidate — risolto
TypeError: Cannot set properties of undefinednel mappare ID relazione in entità embedded (#11942 di @Cprakhar) -
Gestione alias in
RelationIdLoader— usaDriverUtils.getAliasper prevenire troncamenti alias in DB con limiti identificatori brevi (#11228 di @te1) -
Relazioni
*-to-manyincreatePropertyPath— rimosso gestione errori errata che bloccava configurazioni relazione specifiche (#11119 di @ThbltLmr)
Persistenza
-
Upsert con
update: falseogeneratedType— upsert gestisce correttamente colonne che non dovrebbero essere aggiornate (#12030 di @gioboa) -
Trasformatori applicati a
FindOperator—ApplyValueTransformerstrasforma correttamente valori in istanzeFindOperatorcomeIn,Between, ecc. (#11172 di @ZimGil) -
L'eliminazione soft non aggiorna più le righe già eliminate soft —
softDeleteesoftRemoveora saltano le righe già eliminate soft (#10705 by @hassanmehdi98) -
Merge di entità rispetta i valori
null— unire dati in un'entità non scarta più silenziosamente i valori di proprietànull(#11154 by @knoid) -
Confronto mappe/oggetti — risolto il rilevamento errato dei cambiamenti per valori di colonna di tipo Map e oggetto semplice (#10990 by @mgohin)
-
Rilevamento cambiamenti nei transformer di data — risolti falsi positivi nel dirty detection con transformer di valori per date (#11963 by @gioboa)
-
Aggiornamento mpath negli elementi figli — l'mpath delle entità ad albero viene ora aggiornato correttamente durante il riposizionamento, anche con genitori eliminati soft (#10844 by @JoseCToscano)
-
Gestione proprietà virtuali nello schema builder — lo schema builder non tenta più di creare colonne per proprietà virtuali (#11000 by @skyran1278)
-
Drop di
TableForeignKeysenza nome — eliminare una chiave esterna senza nome esplicito non fallisce più (#10744 by @taichunmin) -
getPendingMigrationsnon crea più la tabella migrations — verificare le migrazioni in sospeso non ha più effetti collaterali (#11672 by @pkuczynski)
Correttive specifiche per driver
-
PostgreSQL: persistenza/hydration di
timestamptz— le colonnetimestamp with time zonepersistono e vengono idratate correttamente (#11774 by @Minishlink) -
PostgreSQL: ri-salvataggio di tipi geometrici — i valori point/circle vengono normalizzati al salvataggio per evitare errori durante il ri-salvataggio di oggetti idratati (#11857 by @Cprakhar)
-
PostgreSQL/CockroachDB: tabelle con nomi quotati — gestione corretta di tabelle con caratteri speciali nei nomi (#10993 by @iskalyakin)
-
PostgreSQL: esecuzione sequenziale delle query — le query vengono ora eseguite sequenzialmente sulla stessa connessione per evitare avvisi di deprecazione di
pg8.19.0 (#12105 by @pkuczynski) -
MySQL: rilevamento versione PolarDB-X 2.0 —
getVersion()non restituisce piùundefinedper PolarDB-X 2.0 (#11837 by @Missna) -
MongoDB: traduzione nome proprietà
ObjectIdColumn—findOneBy({ id: value })converte correttamente in_idnelle query MongoDB (#12200 by @pkuczynski) -
MongoDB: array incorporati di documenti nidificati — elabora correttamente gli array incorporati all'interno di strutture di documenti nidificati (#10940 by @mciuchitu)
-
SQLite: array simple-enum — le colonne
simple-enumconarray: truenon generano più errori di vincolo CHECK (#11865 by @Cprakhar) -
SAP HANA: escape parametri
Date— i valoriDatedi JavaScript vengono ora passati come parametri di query invece di essere incorporati nelle stringhe SQL (#11867 by @alumni) -
CockroachDB: risultati strutturati nel ritentativo transazioni — il flag
useStructuredResultviene ora preservato durante il replay dei ritentativi delle transazioni di CockroachDB (#11861 by @naorpeled) -
Cordova: righe interessate dalle query — i risultati delle query includono ora il conteggio delle righe modificate (#10873 by @jacobg)
Altro
-
Comando CLI
init— non si blocca più quandopackage.jsonnon esiste (#11947 by @gioboa) -
Import
processin Deno — risolto l'import errato per la dipendenzaprocesssu Deno (#11248 by @yohannpoli)
Correzioni di sicurezza
- Prevenzione SQL injection — query parametrizzate e identificatori con escape vengono ora utilizzati in tutti i driver per l'introspezione dello schema e i metodi DDL, prevenendo l'iniezione SQL tramite nomi di database/schema/tabella/colonna (#12207 by @pkuczynski, #12197 by @pkuczynski, #12185 by @pkuczynski)
Miglioramenti delle prestazioni
- PostgreSQL / CockroachDB: DROP in batch in
clearDatabase()— consolida le istruzioni DROP individuali in query batch singole, riducendo significativamente i round-trip durante la configurazione dei test (#12164, #12159 by @pkuczynski)