Questa pagina è stata tradotta da PageTurner AI (beta). Non ufficialmente approvata dal progetto. Hai trovato un errore? Segnala problema →
Note di Rilascio 1.0
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 all'Aggiornamento per istruzioni dettagliate.
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) -
MS SQL Server:
options.isolationrinominato inoptions.isolationLevel— il formato del valore è cambiato daREAD_COMMITTEDaREAD COMMITTEDper corrispondere al tipoIsolationLevel; è stato aggiunto il livello di isolamentoSNAPSHOT(#12231 di @Cprakhar) -
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) -
La proprietà
.connectionrinominata in.dataSource— la proprietàconnectionsuDriver,QueryRunner,EntityManager,QueryBuilder,EntityMetadatae tutte le interfacce dei subscriber*Eventè stata rinominata indataSource; è fornito un getter deprecato come ponte (#12244, #12245, #12246, #12249 di @pkuczynski) -
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) -
findOneByIdrimosso — usafindOneByal suo posto (#12198 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()rimosso — era ridondante poiché tutte le query eseguite sono già registrate tramite il logger configurato; usagetSql()ogetQueryAndParameters()per ispezionare la SQL (#12151 di @naorpeled, #12220 di @pkuczynski) -
QueryBuilder: rimosso l'alias di tipo
WhereExpression— usa inveceWhereExpressionBuilder(#12097 by @pkuczynski) -
QueryBuilder: rimosso
replacePropertyNames()— era una no-op (#12178 by @pkuczynski) -
Opzione
joinin find rimossa — usarelationsper LEFT JOIN o QueryBuilder per altri tipi di join (#12188 di @pkuczynski) -
selectbasato su stringhe rimosso — usa la sintassi ad oggettoselect: { id: true }invece diselect: ["id"](#12214 di @pkuczynski) -
relationsbasato su stringhe rimosso — usa la sintassi ad oggettorelations: { profile: true }invece direlations: ["profile"](#12215 di @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) -
RdbmsSchemaBuilder.renameTables()rimosso — metodo vuoto mai chiamato (#12284 di @naorpeled)
Modifiche comportamentali
-
Le relazioni non nullable ora usano INNER JOIN — le relazioni
ManyToOnee proprietarieOneToOnemarcatenullable: falseora usanoINNER JOINinvece diLEFT JOIN, il che può escludere righe con chiavi esterne orfane (#12064 di @pkuczynski) -
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
-
Codemod automatico per la migrazione a v1 — il nuovo pacchetto
@typeorm/codemodautomatizza la maggior parte delle modifiche incompatibili: eseguinpx @typeorm/codemod v1 src/per aggiornare import, ridenominazioni API, sintassi find option e altro (#12233 di @pkuczynski) -
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
-
Relazioni one-to-many orfane con FK non nullable ora vengono eliminate — durante il salvataggio di una relazione one-to-many con cascade e sostituzione dei figli, le righe orfane con FK non nullable vengono ora eliminate invece di causare violationi di constraint; le righe con FK nullable vengono ancora impostate a null come prima (#11982 di @naorpeled)
-
Le relazioni eager ora rispettano
relationLoadStrategy: "query"— le relazioni eager vengono caricate tramite query separate quando è impostata la strategia"query", invece di usare sempre JOIN (#11326 di @SharkSharp, #12256 di @pkuczynski) -
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)
-
Propagazione dello schema/database per le tabelle di giunzione closure — le impostazioni di schema e database ora sono propagate correttamente alle tabelle di giunzione closure (#12110 di @pkuczynski)
-
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 interrompe più quandopackage.jsonnon esiste (#11947 di @gioboa); il pacchetto pubblicato ora include correttamente ledevDependenciesnecessarie per lo scaffolding (#12281 di @pkuczynski) -
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)
-
Validazione delle condizioni in OrderBy —
orderByeaddOrderBydi QueryBuilder ora convalidano i valori delle condizioni a runtime, prevenendo injection tramite espressioni di ordinamento (#12217 di @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)