What mikro-orm/mikro-orm shipped
Written by FoxPlug from the repository's own releases; not affiliated with Mikro-orm. Paste your own repository in the box below and FoxPlug writes the same weekly update for your product. This page is an automatic summary of the releases, pull requests and commits in github.com/mikro-orm/mikro-orm; Mikro-orm did not write it and does not use or endorse FoxPlug. Every line links to the change it describes.
Get a weekly update like this for your product, free
Week of November 2, 2026
What shipped
- Em.upsert() and em.upsertMany() now bump the version property when they update an existing row on conflict. Pull request #8620
- Extra columns of a composite foreign key that references non-PK target columns are now filled with the correct value instead of being written as undefined or left NULL. Pull request #8646
- On conflict, em.upsert(), em.upsertMany() and qb.merge() now merge every column of a composite foreign key rather than only the first. Pull request #8648
- A scalar composite FK value is now written to the column that references the target primary key when a composite FK shares a column with another relation. Pull request #8645
- Em.clone() and qb.insertFrom() now skip generated columns so the database no longer rejects the generated INSERT SELECT. Pull request #8638
- The mssql driver now defaults the request timeout to 60 seconds, up from the 15 second tedious default. Pull request #8647
- The mongo partial index where clause now maps property names to field names before it becomes a partialFilterExpression. Pull request #8635
- A partial refresh now merges reloaded columns into the existing snapshot, so properties loaded earlier are no longer written back on the next flush. Pull request #8633
- Em.findOne with fields naming an inline embeddable now reuses the managed entity instead of re-querying on every call. Pull request #8626
- An empty inverse 1:1 relation with forceUndefined is no longer re-queried on every populate once it is already loaded. Pull request #8627
Why it matters
This week's changes fix upsert and composite foreign key behavior, so writes through em.upsert(), qb.merge() and relation columns keep the correct data on the row. They also close gaps in cloning, partial refresh and inline embeddable lookups that caused extra queries or stale writes. Two releases, 7.2.7 and 7.2.8, shipped the earlier fixes to users on the 7.2 line.
Changelog entry
- Fix(sql): bump the version property when upsert() updates an existing row Pull request #8620
- Fix(core): fill extra columns of a composite FK referencing non-PK target columns Pull request #8646
- Fix(sql): merge every column of a composite FK on upsert conflict Pull request #8648
- Fix(core): write a scalar composite FK value to the column referencing the target PK Pull request #8645
- Fix(sql): skip generated columns in em.clone() and qb.insertFrom() Pull request #8638
- Fix(mssql): raise the default request timeout to 60s Pull request #8647
- Fix(mongo): map property names to field names in the partial index where Pull request #8635
- Fix(core): keep unrefreshed properties in the snapshot on partial refresh Pull request #8633
- Fix(core): reuse managed entity in findOne when fields name an inline embeddable Pull request #8626
- Fix(core): don't re-query empty inverse 1:1 relations on repeated populate Pull request #8627
- Feat(sql): re-export Kysely helpers as the kysely namespace Pull request #8595
- Release: v7.2.8 Release
New releases 7.2.7 and 7.2.8 are out. upsert now bumps the version column and merges every composite FK column on conflict, extra composite FK columns are filled correctly, and clone and insertFrom skip generated columns. mssql now waits 60s by default.
Two patch releases landed this week. Version 7.2.7 and 7.2.8 ship the fixes that came in over the past days. em.upsert() and em.upsertMany() now bump the version property when an existing row is updated on conflict, and the conflict merge covers every column of a composite foreign key instead of just the first. Extra columns of a composite foreign key referencing non-PK target columns are now written correctly, em.clone() and qb.insertFrom() skip generated columns, and a partial refresh keeps the older snapshot data instead of writing it back. The mssql driver now defaults its request timeout to 60 seconds, matching the other drivers more closely, and mongo partial indexes map property names to field names in the where clause.
Week of October 26, 2026
What shipped
- Released v7.2.6 with fixes for the CLI, the MySQL family, MSSQL date handling and property-level index options. Release
- Query comments and hint comments now reject the forbidden sequences they always documented, since nothing enforced them after the knex removal. Pull request #8536
- On MSSQL, date values are now mapped to strings consistently so loaded entities are no longer dirty on every flush. Pull request #8540
- String default values on MySQL and MariaDB are now escaped so backslashes and quotes produce valid, stable DDL. Pull request #8554
- MSSQL now writes JSON values as Unicode literals, so non-Latin characters survive the write. Pull request #8542
- Joined loading now selects the right column when a property is named like another column. Pull request #8527
- Populate no longer crashes when checking nested partial fields through a to-one reference into a collection. Pull request #8549
- The CLI now reports a configured TypeScript config path that is skipped when no TS support is available, instead of failing with an unrelated error. Pull request #8537
- MySQL connections can now set the session time zone, so database-computed values like now() follow the configured zone. Pull request #8538
- Metadata discovery uses sets and maps instead of per-entity scans, removing quadratic lookups during init. Pull request #8533
Why it matters
This week brings a patch release plus correctness fixes that remove false diffs and dirty entities for MySQL, MariaDB and MSSQL users. Joined loading, populate and query comments got stricter fixes, and metadata discovery got faster for projects with many entities.
Changelog entry
- V7.2.6 release with CLI, core and driver bug fixes. Release
- Reject forbidden sequences in query and hint comments. Pull request #8536
- Map MSSQL date results to strings so loaded entities are not dirty. Pull request #8540
- Escape backslashes in string default values on the MySQL family. Pull request #8554
- Write JSON values as Unicode literals on MSSQL. Pull request #8542
- Select the right column in joined loading when a property is named like another column. Pull request #8527
- Unwrap references when checking nested partial fields in populate. Pull request #8549
- Report a configured TS config path skipped without TS support. Pull request #8537
- Set session time zone on new MySQL connections. Pull request #8538
- Avoid quadratic lookups in metadata discovery. Pull request #8533
- Reject a commit of an aborted transaction on PGlite. Pull request #8552
- Align introspected string defaults with the doubled-quote form. Pull request #8553
MikroORM v7.2.6 is out. This week also fixed MSSQL date dirtiness, escaped string defaults on MySQL/MariaDB, Unicode JSON writes on MSSQL, joined loading column selection and populate with partial fields, plus faster metadata discovery.
MikroORM v7.2.6 is out. This week's changes focus on correctness across supported databases. String defaults are now escaped properly so schema:update stops producing permanent diffs and invalid DDL on MySQL and MariaDB. MSSQL writes JSON as Unicode literals and maps date results to strings, so loaded entities are no longer dirty. Joined loading picks the right column when a property shares a name with another column, populate handles nested partial fields through references, and query comments reject forbidden sequences again. Metadata discovery no longer does quadratic lookups, and MySQL can set the session time zone.
Week of October 19, 2026
What shipped
- Fixed a PostgreSQL commit that the server answered with ROLLBACK so transactional() and commit() no longer report success when writes were discarded. Pull request #8499
- A failed rollback to a savepoint now prevents the outer commit instead of only being logged. Pull request #8462
- Fixed generated id mapping for MySQL batch inserts that mix explicit and generated primary keys. Pull request #8475
- Fixed loading of M:N collections whose owner has a nested composite primary key, backported to 6.x. Pull request #8473
- Fixed custom types being converted twice in $some, $none and $every collection operator subqueries. Pull request #8470
- Property-level @Index and @Unique now keep options such as columns, sort order and nulls instead of dropping them. Pull request #8491
- Indexes on object embeddable properties now use the persisted JSON keys instead of a plain column rename. Pull request #8487
- PostgreSQL index sort order introspection now matches columns as whole items rather than partial prefixes. Pull request #8490
- Fixed MySQL string defaults on text and blob columns, including the tiny, medium and long variants. Pull request #8485
- Fixed circular type inference errors in defineEntity when filters is not an inline object literal. Pull request #8479
Why it matters
This week addressed correctness bugs that could silently lose or misapply data: aborted PostgreSQL transactions that appeared to commit, savepoint rollbacks that did not block the outer commit, and MySQL batch inserts that mapped generated ids incorrectly. Several schema and metadata fixes also keep indexes and custom types behaving as declared.
Changelog entry
- Postgresql: reject a commit the server answered with ROLLBACK Pull request #8499
- Sql: refuse to commit when rolling back to a savepoint failed Pull request #8462
- Mysql: correct generated id mapping for batch inserts mixing explicit and generated keys Pull request #8475
- Core: prevent hash collisions for nested composite keys (backport to 6.x) Pull request #8473
- Sql: avoid converting custom types twice in collection operator subqueries Pull request #8470
- Sql: resolve a joined relation's mapped columns once per query Pull request #8465
- Core: keep options of property-level indexes and uniques Pull request #8491
- Sql: use persisted JSON keys for indexes on object embeddable properties Pull request #8487
- Postgres: match index columns as whole items when introspecting sort order Pull request #8490
- Mysql: handle string defaults on text and blob columns Pull request #8485
- Core: fix circular type inference in defineEntity for non-inline filters Pull request #8479
- Sql: select a formula once when a column needs SQL conversion Pull request #8494
This week: PostgreSQL commits answered with ROLLBACK are now rejected, failed savepoint rollbacks block the outer commit, MySQL mixed batch inserts map generated ids correctly, and M:N collections with nested composite keys load right.
This week's fixes focus on cases where the database and the ORM could disagree. A PostgreSQL COMMIT that the server answers with ROLLBACK is now rejected instead of resolving, and a failed rollback to a savepoint prevents the outer transaction from committing. MySQL batch inserts mixing explicit and generated primary keys now map generated ids correctly, M:N collections with a nested composite primary key load correctly in 6.x, and custom types are no longer converted twice in collection operator subqueries. Schema-side fixes keep property-level index and unique options, use persisted JSON keys for indexes on object embeddable properties, and match PostgreSQL index columns as whole items.
Week of October 12, 2026
What shipped
- PostgreSQL now releases the pooled client when its connection drops mid-transaction, so clients are no longer stuck checked out. Pull request #8448
- MSSQL introspection now keeps composite foreign key columns paired instead of joining local and referenced columns by constraint name alone. Pull request #8449
- Core now escapes entity property names in the generated hydration and comparison code, including quoted string literals and the wrap branch. Pull request #8453
- Schema diffing now treats index columns declared without options as default options, so such indexes are no longer re-created on every update. Pull request #8450
- Em.refresh() now skips scalars of uninitialized references and copies only their primary key. Pull request #8444
- Docs now explain that create index concurrently migrations need allOrNothing false so they can see tables created earlier in the run. Pull request #8461
- The relationship loading strategy docs now correctly present balanced as the current default for SQL drivers. Pull request #8452
- Docs now note that Opt and Hidden intersections need an explicit type with reflect-metadata, or they fall back to a text column. Pull request #8446
Why it matters
This week brings several fixes for users on MSSQL, PostgreSQL and the core ORM, covering foreign key introspection, connection pool release on dropped transactions, schema diffing of indexes and refresh of uninitialized references. The docs were also corrected on relationship loading defaults, concurrent index migrations and type limitations with reflect-metadata.
Changelog entry
- PostgreSQL: release pooled client when connection drops mid-transaction Pull request #8448
- MSSQL: keep composite foreign key columns paired during introspection Pull request #8449
- Core: escape entity property names in generated hydration and comparison code Pull request #8453
- Schema: treat index columns without options as default options when diffing Pull request #8450
- Core: skip scalars of uninitialized references in em.refresh() Pull request #8444
- Docs: explain create index concurrently migrations need allOrNothing false Pull request #8461
- Docs: correct relationship loading strategy documentation Pull request #8452
- Docs: note Opt and Hidden intersections need explicit type with reflect-metadata Pull request #8446
This week: MSSQL composite FK introspection, PostgreSQL pooled client release on dropped transactions, escaped property names in hydration code, schema diffing for index columns without options, and refresh fixes. Docs corrected on loading strategies and concurrent index migratio
This week in MikroORM: MSSQL introspection now keeps composite foreign key columns paired. PostgreSQL releases the pooled client when a connection drops mid-transaction. Core escapes entity property names in generated hydration and comparison code. Schema diffing treats index columns without options as default options. em.refresh() skips scalars of uninitialized references. On the docs side, the relationship loading strategies page now correctly introduces balanced as the default for SQL drivers, there is an explanation that create index concurrently migrations need allOrNothing false, and a note that Opt and Hidden intersections need explicit types with reflect-metadata.
Week of October 5, 2026
What shipped
- Release 7.2.5 fixes custom types and serializedName properties in em.refresh, hydration of STI object embeddables declared with different classes via the root, and null custom type values in upsert results. Release
- Metadata discovery no longer crashes when polymorphic embeddable variants, including STI siblings, declare a same-named property as a scalar in one variant and a relation in another, or as relations to different entities. Pull request #8440
- Joins into a non-abstract STI entity now match its subclasses instead of adding an empty discriminator, so nested filters and joined populates return rows. Pull request #8425
- Joined queries now prefer a property's formula over a custom type's convertToJSValueSQL, so properties that use both no longer fail with a missing column alias. Pull request #8415
- Flush ordering now accounts for to-one relations targeting TPT subclasses, inserting the subclass row before owners that reference it. Pull request #8422
- Formula properties declared on TPT child entities are selected in polymorphic loads instead of coming back undefined. Pull request #8419
- Em.refresh now handles custom types and serializedName properties, keeping bigint values as bigints and refreshing mapped keys correctly. Pull request #8413
- UpsertMany groups reloaded rows by condition values instead of scanning per entity when reloading is needed to fill in primary keys. Pull request #8393
- MongoDB upsert without a unique value no longer runs an empty filter that overwrites every document in the collection. Pull request #8398
- Projects living in directories with glob characters no longer fail to resolve migrations, seeders and entities given as absolute paths. Pull request #8390
Why it matters
This week's changes fix crashes and wrong results in polymorphic embeddables, STI joins, TPT flush ordering, formulas in joined queries, refresh with custom types, and upsert handling of nulls and unique keys. They also improve performance for upsertMany reloads and MongoDB M:N population, and make projects in glob-containing paths work.
Changelog entry
- Release 7.2.5 with fixes for custom types and serializedName in em.refresh, STI object embeddable hydration, and null custom type values in upsert results. Release
- Fix metadata discovery crash for same-named properties of different kinds in polymorphic embeddables and STI siblings. Pull request #8440
- Match STI subclasses when joining into a non-abstract STI entity. Pull request #8425
- Prioritize formula over convertToJSValueSQL in joined queries. Pull request #8415
- Order flush around relations to TPT subclasses. Pull request #8422
- Select formulas of TPT descendants in polymorphic loads. Pull request #8419
- Fix custom types and serializedName properties in em.refresh. Pull request #8413
- Keep null custom type values in upsert results. Pull request #8429
- Match reloaded rows in upsertMany when inputs use different unique keys. Pull request #8396
- Insert on MongoDB upsert without a unique value instead of overwriting the collection. Pull request #8398
- Group reloaded rows by condition values in upsertMany. Pull request #8393
- Support glob characters in the project path. Pull request #8390
7.2.5 is out: fixes for em.refresh with custom types, STI embeddable hydration, null values in upsert results, plus STI join matching, TPT flush ordering, formula selection in joined queries, and glob paths in project directories.
Release 7.2.5 is available with fixes for custom types and serializedName in em.refresh, STI object embeddable hydration, and null custom type values in upsert results. Alongside the release, this week brings fixes for metadata discovery with same-named properties across polymorphic embeddable variants, joins into non-abstract STI entities, formulas in joined queries, TPT flush ordering and descendant formulas, MongoDB upserts without a unique value, schema down migrations for routines and triggers, and project paths containing glob characters. Performance work also reduces reload cost in upsertMany and groups MongoDB M:N population in fewer passes.
Week of September 28, 2026
What shipped
- Version 7.2.3 released with fixes for decimal string precision detection, TPT identity reseeding on MSSQL, and Oracle primary key introspection. Release
- Version 6.6.17 released with fixes for enum array properties, populated relation caching, and migration snapshots. Release
- Autoincrement columns now support sequence start and increment options via sequence: { startWith, incrementBy }. Pull request #8353
- Oracle driver now supports database triggers with proper DDL generation and introspection. Pull request #8376
- Batch updates of versioned entities now check row versions to prevent race conditions from concurrent writes. Pull request #8381
- SQLite now properly rebuilds tables when primary keys are added or changed. Pull request #8356
- SQLite schema creation and updates now respect the createForeignKeyConstraints: false option. Pull request #8383
- PostgreSQL identity columns with custom start and increment values are now preserved during schema updates. Pull request #8351
- Oracle now returns non-PK autoincrement and generated column values after inserts. Pull request #8359
- PostgreSQL check constraint diffs now correctly handle double precision casts and between expressions. Pull request #8366
Why it matters
Two stable releases fix critical issues with decimal precision, versioned entity updates, and schema management across multiple databases. New sequence options for autoincrement columns and Oracle trigger support expand schema customization capabilities for users managing complex database structures.
Changelog entry
- Core: detect changes to decimal strings beyond double precision Release
- Mssql: skip TPT child tables when reseeding identities in clear() Release
- Oracle: introspect primary keys so the schema diff can restore and change them Release
- Core: accept plain arrays for enum array properties in EntityData Release
- Core: keep populated relations clean after a result cache hit Release
- Core: add sequence start/increment options for autoincrement columns Pull request #8353
- Oracle: support database triggers Pull request #8376
- Core: check the version in batch updates Pull request #8381
- Sqlite: rebuild the table when the primary key is added or changed Pull request #8356
- Sqlite: respect createForeignKeyConstraints: false in schema create and update Pull request #8383
- Postgres: respect identity options when diffing and rendering columns Pull request #8351
- Oracle: return non-PK autoincrement and generated columns after inserts Pull request #8359
7.2.3 and 6.6.17 released. Fixes for decimal precision, versioned batch updates, TPT identity reseeding, and Oracle triggers. Autoincrement columns now support sequence start/increment options.
Mikro-orm 7.2.3 and 6.6.17 are out. These releases address critical schema and data handling issues: decimal string precision detection beyond double precision, versioned entity batch updates with race condition prevention, TPT identity reseeding on MSSQL, and Oracle trigger support. New feature: autoincrement columns can now specify sequence start and increment values. Schema diffs improved for PostgreSQL identity options, SQLite primary key changes, and SQLite foreign key constraints.
Week of September 21, 2026
What shipped
- Filter by properties of any polymorphic relation target, resolving conditions against all targets that define the queried properties instead of just the first. Pull request #8327
- Order by properties of any polymorphic relation target, with each ordered property resolved against the targets that define it. Pull request #8333
- Cache Kysely result maps and table name lookups to avoid rebuilding field and relation maps on every query result with certain naming strategies. Pull request #8337
- Add per-entity forceUndefined option via @Entity(), EntitySchema, and defineEntity() to override the global ORM setting. Pull request #8325
- Apply target filters when populating polymorphic relations with joined or balanced strategy, respecting soft-delete and other filters. Pull request #8330
- Fix STI bugs where subtypes mapping the same property to different columns would hydrate as null when loading through the root. Pull request #8340
- Throw an error in MongoDB when relation conditions that require a join are used, since MongoDB has no joins. Pull request #8332
- Respect distinct() and distinctOn() in qb.getCount() to return correct counts for deduplicated queries. Pull request #8312
- Respect property returning hints on updates and upserts to keep managed entities in sync with database values. Pull request #8299
- Restrict TPT identity inserts to the owning table for table-per-type upserts with supplied primary keys in SQL Server. Pull request #8291
Why it matters
This week focused on polymorphic relations, with new filtering and ordering capabilities across all targets. Several fixes address data consistency during upserts, especially with heterogeneous batches and transaction handling. Improved cache performance and error handling round out the release.
Changelog entry
- Feat(core): filter by properties of any polymorphic relation target Pull request #8327
- Feat(core): order by properties of any polymorphic relation target Pull request #8333
- Perf(sql): cache kysely result maps and table name lookups Pull request #8337
- Feat(core): add per-entity forceUndefined option Pull request #8325
- Fix(sql): apply target filters when populating polymorphic relations Pull request #8330
- Fix(sql): handle STI subtypes with conflicting property columns and types Pull request #8340
- Fix(mongodb): throw on relation conditions that need a join Pull request #8332
- Fix(sql): do not convert custom types twice in em.countBy() Pull request #8342
- Fix(sql): respect distinct() and distinctOn() in qb.getCount() Pull request #8312
- Fix(sql): keep rows when ordering by polymorphic relation targets Pull request #8334
- Fix(sql): respect property returning hints on updates and upserts Pull request #8299
- Fix(mssql): restrict TPT identity inserts to the owning table Pull request #8291
- Fix(core): allow falsy values in concurrency checks Pull request #8318
- Fix(core): preserve concurrency values in batch lock checks Pull request #8317
- Fix(core): keep entity identity for relations using targetKey Pull request #8323
This week: filter and order by properties of any polymorphic relation target, cache Kysely result maps, add per-entity forceUndefined, fix STI and upsert consistency issues, respect returning hints on updates.
Mikro-orm 6.4 week: polymorphic relations now let you filter and order by properties across all target types, not just the first. Improved Kysely performance with result map caching. Added per-entity forceUndefined options. Fixed data consistency for STI subtypes and heterogeneous upserts. Better handling of returning hints on updates and upserts.
Week of September 14, 2026
What shipped
- Released v7.2.1 with fixes for property name escaping in generated code, populated relations after cache hits, and legacy MSSQL column type mapping. Release
- Fixed remaining positions where property names were not properly escaped in compiled hydrators and comparators, following up on a previous incomplete fix. Pull request #8289
- Added support for legacy MSSQL ntext and image column types, which previously fell back to unknown type instead of mapping to string. Pull request #8288
- Fixed properties marked with returning: true on INSERT statements to properly sync managed entities with their persisted database values after flush. Pull request #8277
- Fixed raw query parameters containing special characters like question marks being incorrectly inlined, causing knex parsing errors. Pull request #8281
- Fixed returning clause being incorrectly emitted inside update sub-queries when native updates traverse relations. Pull request #8283
- Fixed filtered many-to-many references being incorrectly modified during persistence operations. Pull request #8273
Why it matters
This release addresses critical bugs in query execution, type mapping, and entity synchronization that could cause data inconsistency or incorrect query results. The fixes ensure properties are properly escaped in generated code, returning clauses work correctly across different query types, and legacy database column types are handled properly.
Changelog entry
- 7.2.1 (2026-09-19): Escape remaining property names in generated code, keep populated relations clean after result cache hits, map legacy ntext and image column types in MSSQL Release
- Core: escape property names in ObjectHydrator createReference options and inline embeddable child names Pull request #8289
- Mssql: map legacy ntext and image column types instead of falling back to UnknownType Pull request #8288
- Sql: respect property returning hints on INSERT statements to maintain entity synchronization Pull request #8277
- Query-builder: do not inline raw query parameters, pass them untouched to knex Pull request #8281
- Sql: do not emit returning clause inside update sub-query when nativeUpdate traverses relations Pull request #8283
- Sql: preserve filtered many-to-many references during persistence Pull request #8273
V7.2.1 is out. Fixes for property escaping in generated code, MSSQL legacy column type mapping, returning clause handling, and many-to-many reference preservation.
V7.2.1 released with several important fixes: property names are now properly escaped in generated hydrators and comparators, MSSQL legacy ntext and image types are correctly mapped, INSERT returning clauses properly sync entities with database values, raw query parameters with special characters no longer cause parsing errors, and filtered many-to-many references are preserved correctly.