MikroORM v4.0.0 Release Notes

Release Date: 2020-09-08 // over 3 years ago
  • πŸ› Bug Fixes

    • cli: custom tsconfig gets wrong path (#597) (3cdb5dd)
    • core: add RequestContext.createAsync() for Koa (ae3bc0f), closes #709
    • core: allow date to be used as primary key (#609) (d421be8)
    • core: allow having same property name as entity name (6b9d4cd), closes #655
    • core: allow hiding PKs in toObject() (0a920dd), closes #644
    • core: allow populating FK as PK in toJSON() (e05d780)
    • core: do not cascade merge new entities (2b0f208)
    • core: do not lookup in identity map with non-PK conditions (4fb0e52), closes #625
    • core: do not merge entity instances in em.create() (50aaef8)
    • core: fix em.create() with deeply nested data (#683) (a302473), closes #678
    • core: fix default value for cache.enabled (9be725f)
    • core: fix extracting PK out of reference wrapper (db037dc), closes #589
    • core: map values from returning clause via hydrator (c5384b4), closes #725
    • core: mark all properties as populated for new entities (5f7fb8f), closes #784
    • core: reset collections when assigning to those not initialized (e19a6b4)
    • core: support comments in tsconfig.json (6506695), closes #730
    • core: support nullable bigints (3bb2a2d), closes #631
    • core: support self referencing with Reference wrapper (fd1e158), closes #610
    • core: throw when trying to call em.remove(..., null) (77c52dd)
    • mapping: support mixed M:N with composite PK on one side only (a951918)
    • mariadb: enable bigNumberStrings toggle (ee90c64), closes #578
    • mongo: add support for $re operator in mongo (13fe6e5), closes #613
    • postgres: time column type should be a string (#774) (237ddbf)
    • πŸ— query-builder: make sure $or and $and combined works correctly (c8d3a34), closes #792
    • πŸ— query-builder: make sure we use the right alias in complex $and queries (522787e), closes #786
    • πŸ— query-builder: use correct operators in complex and/or conditions (#803) (aca0e10)
    • schema: do not create indexes for each composite PK (91b38cb), closes #760
    • postgres: keep bigint/numeric types as string (014f3b5), closes #324
    • sql: pivot joining of m:n when no target entity needed directly (2b0bb72), closes #549
    • sql: pivot joining of m:n when target entity is null (3b05a59), closes #548
    • sql: rework implicit m:n pivot joining (7928c50)
    • sql: support composite keys in EntityCaseNamingStrategy (8d07727)
    • sql: use composite FKs instead in schema generator (f5c2302)
    • utils: ts-node check now runs in a webpack environment (#657) (4384019)

    πŸ”‹ Features

    • core: add driver.nativeInsertMany() method (#688) (78b2341), closes #442
    • core: add em.begin/commit/rollback methods (#717) (5414c52)
    • core: add EntityRepositoryType symbol (#698) (ffae0a8), closes #696
    • core: add expr helper to allow custom expressions in EM API (39ced1b), closes #802
    • core: add property serializers (3d94b93), closes #809
    • core: add support for entity and property comment (#668) (c01b338)
    • core: add support for filters/scopes (#663) (c1025b9), closes #385
    • core: add support for flush events (#642) (1f12aff), closes #637
    • core: add support for ordering by NULLS (#677) (74ee0cb), closes #675
    • core: allow persisting 1:m collections (#686) (379b289), closes #467
    • core: allow using knex.raw in query params (e6b9f0e), closes #802
    • core: allow using destructing assignments in entity ctors (06a5490), closes #781
    • core: execute hooks via EventManager (#623) (6a7f627), closes #622
    • core: expose populate parameter in wrap(e).init() (d33432a), closes #814
    • core: readonly entity (#738) (7581592)
    • core: refactor internal dependencies to support Yarn PnP (#645) (7e21bb8)
    • core: refactor merging to allow querying by custom type (#800) (bfbc5f8), closes #739
    • core: support globs in entities (#618) (ee81b61), closes #605
    • core: type safe references (#691) (77d64ba), closes #214
    • core: use custom errors for failHandler and metadata (6db22af), closes #611
    • migrations: add Migration.execute() method (5c1f60a), closes #770
    • migrations: add support for initial migrations (#818) (26b2228), closes #772
    • migrations: allow specifying list of migrations (#741) (5a0f2a6), closes #705
    • migrations: allow using knex in migrations (fc2fbaa), closes #799
    • postgres: add $ilike, $overlap, $contains, $contained (3c59885), closes #641
    • πŸ— query-builder: allow ordering by custom expressions (e4674c7), closes #707
    • πŸ— query-builder: make sure we do not prefix virtual props (fd0766c), closes #734
    • cli: allow the use of TS path mapping (#554) (2444192)
    • core: accept references in collection add/remove/set methods (26d132f)
    • core: add connect: boolean param to MikroORM.init() (43a9ce9)
    • core: add having to FindOptions (952fd2f)
    • core: add custom types for array, blob and json (#559) (7703cc5), closes #476
    • core: add pagination support (QueryFlag.PAGINATE) (#544) (d43241e)
    • core: add support for alternative loading strategies (#556) (0b89d4a), closes #440
    • core: add support for event subscribers (#614) (1281356), closes #516
    • core: add support for lazy scalar properties (#585) (cd8c683), closes #427
    • core: add support for Node.js 14 (#522) (2093af8)
    • core: add support for single table inheritance (#503) (8c45339), closes #33
    • core: allow adding items to not initialized collections (#489) (8be8a4d)
    • core: allow adding items to not initialized collections (#489) (ca5eb64)
    • core: do not cache metadata for other than ts-morph provider (#569) (49fb4eb)
    • core: pass entity as parameter in onCreate and onUpdate (#564) (3044a19)
    • core: split project into multiple packages (#475) (636e861)
    • core: use custom exceptions for driver related errors (#539) (2c30679)
    • discovery: use both entity name and path as key in Metadat… (#488) (72f0aca)
    • mapping: add support for embeddables (#514) (0fa06b1)
    • migrations: support custom migration names (8ea71b6), closes #449
    • mongo: add getCollection() method to MongoEntityManager (79a9a7d)
    • mongo: allow creating any kind of index in mongo (8fbe48a)
    • mongo: allow using different primary key types than ObjectId (#568) (e523794), closes #349
    • postgres: use jsonb column type by default (b6c0578)
    • sql: add execute() method to SqlEntityManager (e389d40)
    • sql: add groupBy to FindOptions (2f6687a)
    • sql: add qb.raw() to allow using raw snippets in QB (c09a5b6), closes #598
    • sql: add support for computed properties via @Formula() (#553) (68b9336)
    • sql: add support for sub-queries (#525) (e07f8ad)
    • sql: allow delete queries with auto-joining via sub-queries (#538) (e44bc56), closes #492
    • sql: allow update queries with auto-joining via sub-queries (#537) (cff9a3a), closes #319
    • sql: ensure correct table order in schema generator (#617) (b3949cf)
    • sql: initialize query builder in select mode (#565) (3e3abe7)
    • ts-morph: add ORM version to cache invalidation logic (f28119a)
    • ts-morph: infer nullability from property types (4c45e00)
    • ts-morph: use .d.ts files for ts-morph discovery (#616) (54ce064)

    🐎 Performance Improvements

    • cli: transpile only when using ts-node in CLI (f739f39)
    • core: do not generate sql when logging disabled (f232bb3), closes #732
    • core: implement bulk deletes (#757) (d83f648), closes #732
    • core: improve performance of QB a bit (efc044f), closes #732
    • core: improve speed of inserting new items (bfeb2e3), closes #732
    • core: optimize QB for simple cases (99cfca7), closes #732
    • core: reduce usage of wrap helper internally (66ffc3b), closes #732
    • core: simplify MetadataStorage.find() method (9abbe03), closes #732
    • core: use actual Map for identity maps (3645a20), closes #732
    • core: use Set instead of array for cycle lookups (dff0c9d), closes #732
    • core: use Set instead of array for stacks in UoW (12ba811), closes #732

    πŸ’₯ BREAKING CHANGES

    ⬆️ Please see the upgrading guide.