-
-
Notifications
You must be signed in to change notification settings - Fork 6.5k
fix: Multiple relations with same columns cause invalid SQL to be generated #11400
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: Multiple relations with same columns cause invalid SQL to be generated #11400
Conversation
|
I don't understand why the test passes on nodes 16 and 20, but not on 18. |
e06717d to
5ce82ad
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Copilot reviewed 27 out of 27 changed files in this pull request and generated no comments.
Comments suppressed due to low confidence (1)
src/metadata-builder/RelationJoinColumnBuilder.ts:236
- Using Object.assign with Object.create creates a shallow copy of relationalColumn. Verify that this copy strategy is sufficient for all cases, or consider a deep clone if ColumnMetadata contains nested mutable objects.
relationalColumn = Object.assign(Object.create(ColumnMetadata.prototype) as ColumnMetadata, relationalColumn)
test/other-issues/multiple-relations-same-column/entity/country.ts
Outdated
Show resolved
Hide resolved
68668cd to
eb7f3c5
Compare
|
what else is needed to merge this PR? |
eb7f3c5 to
8eb3024
Compare
commit: |
0d51dc4 to
47a3b69
Compare
|
What's wrong with this PR? |
✅ Actions performedFull review triggered. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
♻️ Duplicate comments (1)
test/github-issues/10121/entity/pref.ts (1)
5-12: Duplicate of earlier feedback: explicittype/length(or@PrimaryGeneratedColumn) would harden this mapping across DBs.
🧹 Nitpick comments (5)
src/util/OrmUtils.ts (1)
95-107:cloneObjectloses non-enumerable property descriptors & getters/setters
Object.assigncopies only enumerable, own props as simple values.
IfColumnMetadataever stores data via non-enumerable props (or uses getters), the clone will silently diverge from the source and may break reflection later.-return Object.assign( - Object.create(Object.getPrototypeOf(object)), - object, -) +const clone = Object.create(Object.getPrototypeOf(object)) +// preserve property descriptors ‑ shallow +Object.defineProperties(clone, Object.getOwnPropertyDescriptors(object)) +return cloneKeeps the cost ~O(n) but preserves descriptors accurately.
Consider updating to avoid hidden edge-cases.test/unit/util/orm-utils.ts (1)
164-200: Nice coverage for constructor-free cloningTest accurately guards against accidental constructor invocation and confirms shallow equality. ✔️
Tiny nit:objCopy2isn’t used beyond the assertion; the intermediate variable could be dropped to trim noise.test/github-issues/10121/entity/city.ts (1)
5-12: Specify column type/length for cross-driver consistency
@PrimaryColumnwithout an explicittype(andlengthfor varchar) lets each driver pick its own default, leading to schema drift between MySQL/Postgres/SQLite. If IDs are strings, spell it out:-@PrimaryColumn({ name: "CITY_ID" }) -id: string +@PrimaryColumn({ name: "CITY_ID", type: "varchar", length: 36 }) // adjust length +id: stringSame for
prefIdandname.test/github-issues/10121/issue-10121.ts (1)
24-30: Minor: preferawaitinsidePromise.allfor readabilityReturning
Promise.all()from the test is fine, but an explicitawaitmakes intent clearer and avoids surprises if more logic is appended later.- it("should not throw error when loading entities with relations using EntityManager", async () => - Promise.all( + it("should not throw error when loading entities with relations using EntityManager", async () => { + await Promise.all( dataSources.map(async (dataSource) => { … - )) + ); + });Pure style – feel free to skip.
test/github-issues/10121/entity/estate.ts (1)
19-23: Nit: specify column type forprefIdfor consistency
cityIdexplicitly setstype: "varchar"whileprefIdrelies on implicit inference. Aligning both improves clarity and avoids driver-specific defaults.- @Column({ name: "PREF_ID", comment: "都道府県ID" }) + @Column({ name: "PREF_ID", type: "varchar", comment: "都道府県ID" })
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (7)
src/metadata-builder/RelationJoinColumnBuilder.ts(2 hunks)src/util/OrmUtils.ts(1 hunks)test/github-issues/10121/entity/city.ts(1 hunks)test/github-issues/10121/entity/estate.ts(1 hunks)test/github-issues/10121/entity/pref.ts(1 hunks)test/github-issues/10121/issue-10121.ts(1 hunks)test/unit/util/orm-utils.ts(1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (3)
test/unit/util/orm-utils.ts (1)
src/util/OrmUtils.ts (1)
OrmUtils(7-585)
test/github-issues/10121/issue-10121.ts (1)
test/utils/test-utils.ts (3)
createTestingConnections(388-482)reloadTestingDatabases(500-505)closeTestingConnections(487-495)
src/metadata-builder/RelationJoinColumnBuilder.ts (1)
src/util/OrmUtils.ts (1)
OrmUtils(7-585)
⏰ Context from checks skipped due to timeout of 90000ms (9)
- GitHub Check: database-tests-compose (20) / sap
- GitHub Check: database-tests-compose (18) / oracle
- GitHub Check: database-tests-compose (20) / oracle
- GitHub Check: database-tests-compose (18) / sap
- GitHub Check: database-tests (20) / cockroachdb
- GitHub Check: database-tests (18) / cockroachdb
- GitHub Check: database-tests (16) / cockroachdb
- GitHub Check: database-tests-windows / better-sqlite3
- GitHub Check: database-tests-windows / sqlite
🔇 Additional comments (2)
src/metadata-builder/RelationJoinColumnBuilder.ts (1)
9-9: Unused import riskGood to see
OrmUtilsimported explicitly. ✅test/github-issues/10121/entity/estate.ts (1)
25-34:Details
❌ Incorrect review comment
Relationship cardinality looks off – consider
ManyToOneinstead ofOneToOneAn estate can reasonably belong to the same city/prefecture as many other estates, so the DB side is typically
N-to-1. Declaring it@OneToOneforces a uniqueness constraint and may hide real-world duplicates or even block inserts in some drivers.If uniqueness is not required for the test, switching to
@ManyToOneis safer and better expresses intent:- @OneToOne(() => CityModel) + @ManyToOne(() => CityModel)Same for the prefecture relation.
Here’s a quick inspection of the test fixtures:
🏁 Script executed:
#!/usr/bin/env bash # List and show the relevant entity files under the GH issue test find test/github-issues/10121 -type f | sed 's/^/FILE: /' echo echo "---- estate.ts ----" sed -n '1,200p' test/github-issues/10121/entity/estate.ts || true echo echo "---- entity directory listing ----" find test/github-issues/10121/entity -maxdepth 1 -type f | sed 's/^/FILE: /' echo echo "---- city.ts ----" sed -n '1,200p' test/github-issues/10121/entity/city.ts || true echo echo "---- pref.ts ----" sed -n '1,200p' test/github-issues/10121/entity/pref.ts || trueLength of output: 2329
Adding the test that drives this fixture for context:
🏁 Script executed:
#!/usr/bin/env bash # Show the GH issue reproduction test sed -n '1,200p' test/github-issues/10121/issue-10121.ts || trueLength of output: 2824
Ignore cardinality change for this test fixture
The OneToOne relations in test/github-issues/10121/entity/estate.ts are intentionally defined to reproduce issue #10121. Switching to ManyToOne here would break the test scenario. Please leave these decorators as-is.Likely an incorrect or invalid review comment.
sgarner
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The code change itself is simple and good. 👍
Just the tests could still be improved.
a6ebb2d to
69973ef
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (3)
test/functional/metadata-builder/relation-join-column-builder/relation-join-column-builder.ts (2)
24-32: ExplicitlyawaitthePromise.allto surface failures quickerMocha treats the returned
Promisecorrectly, but addingawaitimproves readability and guarantees that an accidental refactor (e.g., adding extra statements afterPromise.all) won’t silently skip waiting for the async work.- it("should not throw error when loading entities with composite FK with shared columns", async () => - Promise.all( + it("should not throw error when loading entities with composite FK with shared columns", async () => + await Promise.all(
47-55: Rename the result variable to avoid confusion with theOrderclassUsing the capitalised
Ordersshadows the importedOrderidentifier and breaks the common convention that variables should start with a lower-case letter, potentially tripping static-analysis rules.- const Orders = await dataSource.getRepository(Order).find({ + const orders = await dataSource.getRepository(Order).find({ ... - expect(Orders).to.deep.members([ + expect(orders).to.deep.members([test/functional/metadata-builder/relation-join-column-builder/entity/Order.ts (1)
19-21: Declare the join column forcountryexplicitly for clarity
countryIdis reused in two different relations. Although the new cloning logic now handles this, being explicit prevents ambiguity and makes the mapping self-documenting.- @ManyToOne(() => Country) + @ManyToOne(() => Country) + @JoinColumn({ name: "countryId" }) // keep the FK intent unambiguous country: Country
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (4)
test/functional/metadata-builder/relation-join-column-builder/entity/City.ts(1 hunks)test/functional/metadata-builder/relation-join-column-builder/entity/Country.ts(1 hunks)test/functional/metadata-builder/relation-join-column-builder/entity/Order.ts(1 hunks)test/functional/metadata-builder/relation-join-column-builder/relation-join-column-builder.ts(1 hunks)
✅ Files skipped from review due to trivial changes (2)
- test/functional/metadata-builder/relation-join-column-builder/entity/Country.ts
- test/functional/metadata-builder/relation-join-column-builder/entity/City.ts
🧰 Additional context used
🧬 Code Graph Analysis (2)
test/functional/metadata-builder/relation-join-column-builder/relation-join-column-builder.ts (1)
test/utils/test-utils.ts (3)
createTestingConnections(388-482)reloadTestingDatabases(500-505)closeTestingConnections(487-495)
test/functional/metadata-builder/relation-join-column-builder/entity/Order.ts (6)
test/functional/metadata-builder/relation-join-column-builder/entity/City.ts (1)
Entity(3-14)test/functional/metadata-builder/relation-join-column-builder/entity/Country.ts (1)
Entity(3-10)src/decorator/columns/PrimaryGeneratedColumn.ts (1)
PrimaryGeneratedColumn(55-119)src/decorator/columns/Column.ts (1)
Column(134-220)src/decorator/relations/ManyToOne.ts (1)
ManyToOne(33-77)src/decorator/relations/JoinColumn.ts (1)
JoinColumn(31-48)
⏰ Context from checks skipped due to timeout of 90000ms (20)
- GitHub Check: database-tests (18) / mssql (^9.1.1)
- GitHub Check: database-tests (18) / mssql (^10.0.1)
- GitHub Check: database-tests (18) / mssql (^11.0.1)
- GitHub Check: database-tests (16) / mongodb
- GitHub Check: database-tests (16) / sqlite
- GitHub Check: database-tests (16) / sqljs
- GitHub Check: database-tests (16) / cockroachdb
- GitHub Check: database-tests (16) / better-sqlite3
- GitHub Check: database-tests (16) / mssql (^11.0.1)
- GitHub Check: database-tests (16) / mysql_mariadb
- GitHub Check: database-tests (16) / mssql (^9.1.1)
- GitHub Check: database-tests (16) / mssql (^10.0.1)
- GitHub Check: database-tests-compose (18) / oracle
- GitHub Check: database-tests-compose (20) / sap
- GitHub Check: database-tests-compose (18) / sap
- GitHub Check: database-tests-windows / better-sqlite3
- GitHub Check: database-tests-compose (20) / oracle
- GitHub Check: database-tests-windows / sqlite
- GitHub Check: database-tests-windows / sqljs
- GitHub Check: Analyze (javascript-typescript)
e205139 to
56b80ea
Compare
| import { Column, Entity, PrimaryColumn, Unique } from "../../../../../src" | ||
|
|
||
| @Entity() | ||
| @Unique(["id", "countryId"]) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Primary keys (in this case, id) already uniquely identify a row. So a unique constraint that includes the primary key is unnecessary.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it will not be possible to create a foreign key constraint for Order#city
postgres example:
query failed: ALTER TABLE "order" ADD CONSTRAINT "FK_848d8fcd4aee3bd32043148f4bb" FOREIGN KEY ("cityId", "countryId") REFERENCES "city"("id","countryId") ON DELETE NO ACTION ON UPDATE NO ACTION
error: error: there is no unique constraint matching given keys for referenced table "city"
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Aaah, of course it is not possible when you have a simple primary key.
It was okay before, when the primary key was composite: cityId and countryId.
Normally TypeORM creates the unique constraint automatically so you don't have to, unless there's already a unique index (in this case, the PK) that is a subset of it. Why doesn't TypeORM create it? Because some databases complain about this (because it doesn't make sense to them).
With a composite primary key (countryName, cityName), you could have:
City (countryName, cityName, population): ('France', 'Paris', 2100), ('Texas', 'Paris', 25)
test/functional/metadata-builder/relation-join-column-builder/entity/Order.ts
Outdated
Show resolved
Hide resolved
…h composite foreign key relations,
56b80ea to
4be90a1
Compare
|
@alumni please restart the check or tell me how to do it |
@yevhen-komarov you don't have the permission, I'll be able to do it after all actions complete. Seems the coverage collecting service has some random 500 errors, so nothing to worry about ;) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (1)
test/functional/metadata-builder/relation-join-column-builder/entity/City.ts (1)
11-12: Explicitly define thepopulationcolumn type to avoid platform-specific defaultsRelying on TypeORM’s type inference (
number→ DB‐specific integer) can lead to inconsistent precision/size across the test matrix (e.g., MySQLINT, PostgresINTEGER, SQLiteREAL).
If the domain allows values larger than 2^31-1 or requires fixed precision, specify the type explicitly:- @Column() + @Column({ type: "bigint" }) // or "integer", "int", etc. – pick what the test needs population: number
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (4)
test/functional/metadata-builder/relation-join-column-builder/entity/City.ts(1 hunks)test/functional/metadata-builder/relation-join-column-builder/entity/Company.ts(1 hunks)test/functional/metadata-builder/relation-join-column-builder/entity/Country.ts(1 hunks)test/functional/metadata-builder/relation-join-column-builder/relation-join-column-builder.ts(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- test/functional/metadata-builder/relation-join-column-builder/relation-join-column-builder.ts
🧰 Additional context used
🧬 Code Graph Analysis (2)
test/functional/metadata-builder/relation-join-column-builder/entity/City.ts (4)
test/functional/metadata-builder/relation-join-column-builder/entity/Country.ts (1)
Entity(3-10)test/functional/metadata-builder/relation-join-column-builder/entity/Company.ts (1)
Entity(11-32)src/decorator/columns/PrimaryColumn.ts (1)
PrimaryColumn(37-100)src/decorator/columns/Column.ts (1)
Column(134-220)
test/functional/metadata-builder/relation-join-column-builder/entity/Country.ts (4)
test/functional/metadata-builder/relation-join-column-builder/entity/City.ts (1)
Entity(3-13)test/functional/metadata-builder/relation-join-column-builder/entity/Company.ts (1)
Entity(11-32)src/decorator/columns/PrimaryColumn.ts (1)
PrimaryColumn(37-100)src/decorator/columns/Column.ts (1)
Column(134-220)
⏰ Context from checks skipped due to timeout of 90000ms (20)
- GitHub Check: database-tests (18) / mssql (^11.0.1)
- GitHub Check: database-tests (18) / mssql (^10.0.1)
- GitHub Check: database-tests (16) / mssql (^9.1.1)
- GitHub Check: database-tests (16) / mssql (^11.0.1)
- GitHub Check: database-tests (16) / postgres (17-3.5)
- GitHub Check: database-tests (16) / mysql_mariadb
- GitHub Check: database-tests (16) / mssql (^10.0.1)
- GitHub Check: database-tests (16) / cockroachdb
- GitHub Check: database-tests (16) / sqljs
- GitHub Check: database-tests (16) / better-sqlite3
- GitHub Check: database-tests (16) / postgres (14-3.5)
- GitHub Check: database-tests (16) / mongodb
- GitHub Check: database-tests (16) / sqlite
- GitHub Check: database-tests-compose (20) / oracle
- GitHub Check: database-tests-compose (20) / sap
- GitHub Check: database-tests-compose (18) / sap
- GitHub Check: database-tests-windows / better-sqlite3
- GitHub Check: database-tests-windows / sqljs
- GitHub Check: database-tests-windows / sqlite
- GitHub Check: Analyze (javascript-typescript)
🔇 Additional comments (2)
test/functional/metadata-builder/relation-join-column-builder/entity/Country.ts (1)
3-10: Entity definition looks goodStraight-forward primary column plus a regular column; no issues spotted.
test/functional/metadata-builder/relation-join-column-builder/entity/Company.ts (1)
19-31: Let’s refine the search to locate any generated SQL schema files and explicitly look forcountryNameforeign-key definitions across all drivers:#!/bin/bash # Locate all .sql files in the project and report any FOREIGN KEY on countryName SQL_FILES=$(find . -type f -name "*.sql") if [ -z "$SQL_FILES" ]; then echo "No .sql files found in the project." exit 0 fi for file in $SQL_FILES; do echo "== $file ==" grep -n -E 'FOREIGN KEY.*(`countryName`|"countryName")' "$file" \ || echo " → No FK referencing countryName in this file." done
|
@yevhen-komarov Many thanks for the contribution, this was a long-standing issue (I also encountered it in my project at some point), I think many people will be pleased to see it's fixed :) |
 <h3>Snyk has created this PR to upgrade typeorm from 0.3.24 to 0.3.25.</h3> :information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project. <hr/> - The recommended version is **22 versions** ahead of your current version. - The recommended version was released **22 days ago**. <details> <summary><b>Release notes</b></summary> <br/> <details> <summary>Package name: <b>typeorm</b></summary> <ul> <li> <b>0.3.25</b> - <a href="https://redirect.github.com/typeorm/typeorm/releases/tag/0.3.25">2025-06-19</a></br><h2>What's Changed</h2> <ul> <li>docs: use correct SQL statements in softDelete/restore comments by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sgarner/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/sgarner">@ sgarner</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3081453606" data-permission-text="Title is private" data-url="typeorm/typeorm#11489" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11489/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11489">#11489</a></li> <li>fix: resolve alias or table name in upsert and orUpdate for PostgreSQL driver conditionally by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mmarifat/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/mmarifat">@ mmarifat</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3047096667" data-permission-text="Title is private" data-url="typeorm/typeorm#11452" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11452/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11452">#11452</a></li> <li>feat(spanner): use credentials from connection options by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/denes/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/denes">@ denes</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3086575395" data-permission-text="Title is private" data-url="typeorm/typeorm#11492" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11492/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11492">#11492</a></li> <li>feat: add upsert support for Oracle, SQLServer and SAP HANA by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Yuuki-Sakura/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/Yuuki-Sakura">@ Yuuki-Sakura</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2404532307" data-permission-text="Title is private" data-url="typeorm/typeorm#10974" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/10974/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/10974">#10974</a></li> <li>fix: handle limit(0) and offset(0) correctly in SelectQueryBuilder by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/yeonghun104/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/yeonghun104">@ yeonghun104</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3116497992" data-permission-text="Title is private" data-url="typeorm/typeorm#11507" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11507/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11507">#11507</a></li> <li>fix: add collation update detection in PostgresDriver by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/asn6878/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/asn6878">@ asn6878</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3040527205" data-permission-text="Title is private" data-url="typeorm/typeorm#11441" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11441/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11441">#11441</a></li> <li>feat: add typesense/docsearch-scraper by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/gioboa/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/gioboa">@ gioboa</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3003003060" data-permission-text="Title is private" data-url="typeorm/typeorm#11424" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11424/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11424">#11424</a></li> <li>chore: improve linting by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alumni/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/alumni">@ alumni</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3122060339" data-permission-text="Title is private" data-url="typeorm/typeorm#11510" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11510/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11510">#11510</a></li> <li>chore: improve linting (fixup) by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alumni/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/alumni">@ alumni</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3122508176" data-permission-text="Title is private" data-url="typeorm/typeorm#11511" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11511/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11511">#11511</a></li> <li>docs: new website initial commit by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/naorpeled/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/naorpeled">@ naorpeled</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2991307150" data-permission-text="Title is private" data-url="typeorm/typeorm#11408" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11408/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11408">#11408</a></li> <li>fix: fix up doc search workflow by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/gioboa/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/gioboa">@ gioboa</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3125253351" data-permission-text="Title is private" data-url="typeorm/typeorm#11513" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11513/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11513">#11513</a></li> <li>chore: update workflows to ignore changes in docs directory by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dlhck/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/dlhck">@ dlhck</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3132733241" data-permission-text="Title is private" data-url="typeorm/typeorm#11518" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11518/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11518">#11518</a></li> <li>feat(docs): add Plausible analytics script to Docusaurus config by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/dlhck/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/dlhck">@ dlhck</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3132688431" data-permission-text="Title is private" data-url="typeorm/typeorm#11517" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11517/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11517">#11517</a></li> <li>docs: add note about using YugabyteDB by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mguida22/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/mguida22">@ mguida22</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3137325649" data-permission-text="Title is private" data-url="typeorm/typeorm#11521" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11521/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11521">#11521</a></li> <li>chore(docs): improve website generation config by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alumni/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/alumni">@ alumni</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3143665449" data-permission-text="Title is private" data-url="typeorm/typeorm#11527" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11527/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11527">#11527</a></li> <li>fix(tree-entity): closure junction table primary key definition should match parent table by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/gongAll/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/gongAll">@ gongAll</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3002433767" data-permission-text="Title is private" data-url="typeorm/typeorm#11422" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11422/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11422">#11422</a></li> <li>docs: add heading to Getting Started page by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sgarner/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/sgarner">@ sgarner</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3151614715" data-permission-text="Title is private" data-url="typeorm/typeorm#11531" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11531/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11531">#11531</a></li> <li>fix: Multiple relations with same columns cause invalid SQL to be generated by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/yevhen-komarov/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/yevhen-komarov">@ yevhen-komarov</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2984486062" data-permission-text="Title is private" data-url="typeorm/typeorm#11400" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11400/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11400">#11400</a></li> <li>fix: fix null pointer exception on date array column comparison by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mnbaccari/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/mnbaccari">@ mnbaccari</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3153601577" data-permission-text="Title is private" data-url="typeorm/typeorm#11532" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11532/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11532">#11532</a></li> <li>chore(ci): simplify workflows by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alumni/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/alumni">@ alumni</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3147752910" data-permission-text="Title is private" data-url="typeorm/typeorm#11530" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11530/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11530">#11530</a></li> <li>fix: improve async calls on disconnect by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/alumni/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/alumni">@ alumni</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3139265175" data-permission-text="Title is private" data-url="typeorm/typeorm#11523" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11523/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11523">#11523</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mmarifat/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/mmarifat">@ mmarifat</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3047096667" data-permission-text="Title is private" data-url="typeorm/typeorm#11452" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11452/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11452">#11452</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/yeonghun104/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/yeonghun104">@ yeonghun104</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3116497992" data-permission-text="Title is private" data-url="typeorm/typeorm#11507" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11507/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11507">#11507</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/asn6878/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/asn6878">@ asn6878</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3040527205" data-permission-text="Title is private" data-url="typeorm/typeorm#11441" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11441/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11441">#11441</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/gongAll/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/gongAll">@ gongAll</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3002433767" data-permission-text="Title is private" data-url="typeorm/typeorm#11422" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11422/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11422">#11422</a></li> </ul> <p><strong>Full Changelog</strong>: <a class="commit-link" href="https://redirect.github.com/typeorm/typeorm/compare/0.3.24...0.3.25"><tt>0.3.24...0.3.25</tt></a></p> </li> <li> <b>0.3.25-dev.eb3093d</b> - 2025-06-05 </li> <li> <b>0.3.25-dev.ead4f98</b> - 2025-06-18 </li> <li> <b>0.3.25-dev.ce23d46</b> - 2025-06-16 </li> <li> <b>0.3.25-dev.b1e93f7</b> - 2025-06-18 </li> <li> <b>0.3.25-dev.af9ecc0</b> - 2025-06-17 </li> <li> <b>0.3.25-dev.a9c16ee</b> - 2025-06-05 </li> <li> <b>0.3.25-dev.930eefd</b> - 2025-06-06 </li> <li> <b>0.3.25-dev.86f12c9</b> - 2025-06-10 </li> <li> <b>0.3.25-dev.65d5a00</b> - 2025-06-05 </li> <li> <b>0.3.25-dev.63a3b9a</b> - 2025-06-17 </li> <li> <b>0.3.25-dev.61753b1</b> - 2025-06-05 </li> <li> <b>0.3.25-dev.5003aaa</b> - 2025-05-21 </li> <li> <b>0.3.25-dev.4b0ffee</b> - 2025-06-06 </li> <li> <b>0.3.25-dev.42e7cbe</b> - 2025-06-17 </li> <li> <b>0.3.25-dev.42913b9</b> - 2025-06-11 </li> <li> <b>0.3.25-dev.413f0a6</b> - 2025-06-05 </li> <li> <b>0.3.25-dev.2bfa300</b> - 2025-06-04 </li> <li> <b>0.3.25-dev.24c3e38</b> - 2025-06-05 </li> <li> <b>0.3.25-dev.12a71e4</b> - 2025-05-14 </li> <li> <b>0.3.25-dev.07d7913</b> - 2025-06-04 </li> <li> <b>0.3.25-dev.03faa78</b> - 2025-06-14 </li> <li> <b>0.3.24</b> - <a href="https://redirect.github.com/typeorm/typeorm/releases/tag/0.3.24">2025-05-14</a></br><h2>What's Changed</h2> <ul> <li>feat: add tagged template for executing raw SQL queries by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Newbie012/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/Newbie012">@ Newbie012</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3028712893" data-permission-text="Title is private" data-url="typeorm/typeorm#11432" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11432/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11432">#11432</a></li> <li>chore: Add husky and lint-staged by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/maxbronnikov10/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/maxbronnikov10">@ maxbronnikov10</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3044164801" data-permission-text="Title is private" data-url="typeorm/typeorm#11448" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11448/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11448">#11448</a></li> <li>fix: resolve pkg.pr.new issue by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/naorpeled/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/naorpeled">@ naorpeled</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3054189764" data-permission-text="Title is private" data-url="typeorm/typeorm#11463" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11463/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11463">#11463</a></li> <li>perf: improve save performance during entities update by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lotczyk/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/lotczyk">@ lotczyk</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3049144737" data-permission-text="Title is private" data-url="typeorm/typeorm#11456" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11456/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11456">#11456</a></li> <li>refactor: remove unused NamingStrategyNotFoundError by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mguida22/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/mguida22">@ mguida22</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3053756244" data-permission-text="Title is private" data-url="typeorm/typeorm#11462" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11462/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11462">#11462</a></li> <li>chore: add note about breaking change in 0.3.23 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mguida22/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/mguida22">@ mguida22</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3057590521" data-permission-text="Title is private" data-url="typeorm/typeorm#11469" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11469/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11469">#11469</a></li> <li>build: include db version in coveralls flag-name by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mguida22/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/mguida22">@ mguida22</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3053694931" data-permission-text="Title is private" data-url="typeorm/typeorm#11461" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11461/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11461">#11461</a></li> <li>chore: include warning about update({}) in changelog by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sgarner/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/sgarner">@ sgarner</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3058303343" data-permission-text="Title is private" data-url="typeorm/typeorm#11471" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11471/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11471">#11471</a></li> <li>feat: add updateAll and deleteAll methods to EntityManager and Repository APIs by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sgarner/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/sgarner">@ sgarner</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3051787023" data-permission-text="Title is private" data-url="typeorm/typeorm#11459" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11459/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11459">#11459</a></li> <li>Fix/11466 mssql find operator by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/christian-forgacs/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/christian-forgacs">@ christian-forgacs</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3056841300" data-permission-text="Title is private" data-url="typeorm/typeorm#11468" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11468/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11468">#11468</a></li> <li>feat(spanner): support insert returning by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/denes/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/denes">@ denes</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3052844885" data-permission-text="Title is private" data-url="typeorm/typeorm#11460" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11460/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11460">#11460</a></li> <li>chore: clarify commit practices by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mguida22/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/mguida22">@ mguida22</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3058510988" data-permission-text="Title is private" data-url="typeorm/typeorm#11472" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11472/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11472">#11472</a></li> <li>fix(mssql): avoid mutating input parameter array values by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/sgarner/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/sgarner">@ sgarner</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3061331662" data-permission-text="Title is private" data-url="typeorm/typeorm#11476" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11476/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11476">#11476</a></li> <li>fix: capacitor driver PRAGMA bug by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AlexAzartsev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/AlexAzartsev">@ AlexAzartsev</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3056524220" data-permission-text="Title is private" data-url="typeorm/typeorm#11467" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11467/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11467">#11467</a></li> <li>chore: version 0.3.24 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mguida22/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/mguida22">@ mguida22</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3063696327" data-permission-text="Title is private" data-url="typeorm/typeorm#11478" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11478/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11478">#11478</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/denes/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/denes">@ denes</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3052844885" data-permission-text="Title is private" data-url="typeorm/typeorm#11460" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11460/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11460">#11460</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/AlexAzartsev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/AlexAzartsev">@ AlexAzartsev</a> made their first contribution in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3056524220" data-permission-text="Title is private" data-url="typeorm/typeorm#11467" data-hovercard-type="pull_request" data-hovercard-url="/typeorm/typeorm/pull/11467/hovercard" href="https://redirect.github.com/typeorm/typeorm/pull/11467">#11467</a></li> </ul> <p><strong>Full Changelog</strong>: <a class="commit-link" href="https://redirect.github.com/typeorm/typeorm/compare/0.3.23...0.3.24"><tt>0.3.23...0.3.24</tt></a></p> </li> </ul> from <a href="https://redirect.github.com/typeorm/typeorm/releases">typeorm GitHub release notes</a> </details> </details> --- > [!IMPORTANT] > > - Check the changes in this PR to ensure they won't cause issues with your project. > - This PR was automatically created by Snyk using the credentials of a real user. > - Snyk has automatically assigned this pull request, [set who gets assigned](/settings/integration). --- **Note:** _You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs._ **For more information:** <img src="https://api.segment.io/v1/pixel/track?data=eyJ3cml0ZUtleSI6InJyWmxZcEdHY2RyTHZsb0lYd0dUcVg4WkFRTnNCOUEwIiwiYW5vbnltb3VzSWQiOiIwYjZmODgzMy0xZWFiLTRmYjItOGY5My1mNDAxMmRhYmFkZWQiLCJldmVudCI6IlBSIHZpZXdlZCIsInByb3BlcnRpZXMiOnsicHJJZCI6IjBiNmY4ODMzLTFlYWItNGZiMi04ZjkzLWY0MDEyZGFiYWRlZCJ9fQ==" width="0" height="0"/> > - 🧐 [View latest project report](https://app.snyk.io/org/renatosugimoto/project/31d5132a-e6b1-4b8a-a6a3-43b157a71ac5?utm_source=github&utm_medium=referral&page=upgrade-pr) > - 👩💻 [Set who automatically gets assigned](https://app.snyk.io/org/renatosugimoto/project/31d5132a-e6b1-4b8a-a6a3-43b157a71ac5/settings/integration?utm_source=github&utm_medium=referral&page=upgrade-pr/) > - 📜 [Customise PR templates](https://docs.snyk.io/scan-using-snyk/pull-requests/snyk-fix-pull-or-merge-requests/customize-pr-templates?utm_source=&utm_content=fix-pr-template) > - 🛠 [Adjust upgrade PR settings](https://app.snyk.io/org/renatosugimoto/project/31d5132a-e6b1-4b8a-a6a3-43b157a71ac5/settings/integration?utm_source=github&utm_medium=referral&page=upgrade-pr) > - 🔕 [Ignore this dependency or unsubscribe from future upgrade PRs](https://app.snyk.io/org/renatosugimoto/project/31d5132a-e6b1-4b8a-a6a3-43b157a71ac5/settings/integration?pkg=typeorm&utm_source=github&utm_medium=referral&page=upgrade-pr#auto-dep-upgrades) [//]: # 'snyk:metadata:{"customTemplate":{"variablesUsed":[],"fieldsUsed":[]},"dependencies":[{"name":"typeorm","from":"0.3.24","to":"0.3.25"}],"env":"prod","hasFixes":false,"isBreakingChange":false,"isMajorUpgrade":false,"issuesToFix":[],"prId":"0b6f8833-1eab-4fb2-8f93-f4012dabaded","prPublicId":"0b6f8833-1eab-4fb2-8f93-f4012dabaded","packageManager":"npm","priorityScoreList":[],"projectPublicId":"31d5132a-e6b1-4b8a-a6a3-43b157a71ac5","projectUrl":"https://app.snyk.io/org/renatosugimoto/project/31d5132a-e6b1-4b8a-a6a3-43b157a71ac5?utm_source=github&utm_medium=referral&page=upgrade-pr","prType":"upgrade","templateFieldSources":{"branchName":"default","commitMessage":"default","description":"default","title":"default"},"templateVariants":[],"type":"auto","upgrade":[],"upgradeInfo":{"versionsDiff":22,"publishedDate":"2025-06-19T18:32:25.818Z"},"vulns":[]}' Co-authored-by: snyk-bot <[email protected]>
…ECT statement (typeorm#11400) * fix: Multiple relations with same columns cause invalid SQL to be generated Closes: typeorm#1668, typeorm#9788, typeorm#9814, typeorm#10121, typeorm#10148, typeorm#11109, typeorm#11132, typeorm#11180 * refactor: extract cloneObject util * fix: improve cloneObject * test: remove duplicate tests * test: transformed the test: add City, Country, and Order entities with composite foreign key relations, * test: change to composite primary key --------- Co-authored-by: Lucian Mocanu <[email protected]>
Closes: #1668
Closes: #4800
Closes: #9788
Closes: #9814
Closes: #10121
Closes: #10148
Closes: #11109
Closes: #11132
Closes: #11180
Description of change
In
RelationJoinColumnBuilder.collectColumns,relationalColumnis used by reference andreferencedColumnis overwritten.Solution: Create a copy of the found
relationalColumn.Pull-Request Checklist
masterbranchnpm run formatto apply prettier formattingnpm run testpasses with this changeFixes #0000Summary by CodeRabbit