Skip to content

Conversation

@yevhen-komarov
Copy link
Contributor

@yevhen-komarov yevhen-komarov commented Apr 10, 2025

Closes: #1668
Closes: #4800
Closes: #9788
Closes: #9814
Closes: #10121
Closes: #10148
Closes: #11109
Closes: #11132
Closes: #11180

Description of change

In RelationJoinColumnBuilder.collectColumns, relationalColumn is used by reference and referencedColumn is overwritten.
Solution: Create a copy of the found relationalColumn.

Pull-Request Checklist

  • Code is up-to-date with the master branch
  • npm run format to apply prettier formatting
  • npm run test passes with this change
  • This pull request links relevant issues as Fixes #0000
  • There are new or updated unit tests validating the change
  • Documentation has been updated to reflect this change
  • The new commits follow conventions explained in CONTRIBUTING.md

Summary by CodeRabbit

  • New Features
    • Added new entity types for City, Country, and Company with support for composite primary keys and relationships.
  • Bug Fixes
    • Improved handling of composite foreign key relations to prevent errors and ensure correct loading of related entities.
  • Tests
    • Introduced comprehensive tests to verify correct behavior with composite foreign keys and entity relationships.

@yevhen-komarov yevhen-komarov marked this pull request as draft April 10, 2025 05:16
@coveralls
Copy link

coveralls commented Apr 10, 2025

Coverage Status

coverage: 76.349% (+0.002%) from 76.347%
when pulling a6ebb2d on yevhen-komarov:fix-multiple-relations-same-column
into 930eefd on typeorm:master.

@yevhen-komarov yevhen-komarov marked this pull request as ready for review April 10, 2025 13:29
@yevhen-komarov yevhen-komarov marked this pull request as draft April 12, 2025 03:25
@yevhen-komarov yevhen-komarov marked this pull request as ready for review April 12, 2025 03:25
@yevhen-komarov
Copy link
Contributor Author

I don't understand why the test passes on nodes 16 and 20, but not on 18.
Should I rewrite test github issues > #7283 ... to ignore the order of array elements?

@yevhen-komarov yevhen-komarov force-pushed the fix-multiple-relations-same-column branch from e06717d to 5ce82ad Compare April 15, 2025 08:16
@w3nl w3nl requested review from Copilot and w3nl April 15, 2025 12:17
Copy link
Contributor

Copilot AI left a 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)

@yevhen-komarov yevhen-komarov requested a review from w3nl April 15, 2025 14:14
@yevhen-komarov yevhen-komarov requested a review from alumni April 18, 2025 04:05
@yevhen-komarov yevhen-komarov force-pushed the fix-multiple-relations-same-column branch from 68668cd to eb7f3c5 Compare April 23, 2025 08:02
@yevhen-komarov
Copy link
Contributor Author

what else is needed to merge this PR?

@yevhen-komarov yevhen-komarov force-pushed the fix-multiple-relations-same-column branch from eb7f3c5 to 8eb3024 Compare May 4, 2025 06:21
@pkg-pr-new
Copy link

pkg-pr-new bot commented May 4, 2025

typeorm-sql-js-example

npm i https://pkg.pr.new/typeorm/typeorm@11400

commit: 19f027c

@yevhen-komarov
Copy link
Contributor Author

What's wrong with this PR?
Why isn't it being merged?
I've already successfully used this build in some production projects.

@alumni alumni added the need review help its required for multiple people to review the issue or PR label May 14, 2025
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jun 15, 2025

✅ Actions performed

Full review triggered.

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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: explicit type / length (or @PrimaryGeneratedColumn) would harden this mapping across DBs.

🧹 Nitpick comments (5)
src/util/OrmUtils.ts (1)

95-107: cloneObject loses non-enumerable property descriptors & getters/setters

Object.assign copies only enumerable, own props as simple values.
If ColumnMetadata ever 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 clone

Keeps 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 cloning

Test accurately guards against accidental constructor invocation and confirms shallow equality. ✔️
Tiny nit: objCopy2 isn’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

@PrimaryColumn without an explicit type (and length for 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: string

Same for prefId and name.

test/github-issues/10121/issue-10121.ts (1)

24-30: Minor: prefer await inside Promise.all for readability

Returning Promise.all() from the test is fine, but an explicit await makes 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 for prefId for consistency

cityId explicitly sets type: "varchar" while prefId relies 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

📥 Commits

Reviewing files that changed from the base of the PR and between 930eefd and a6ebb2d.

📒 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 risk

Good to see OrmUtils imported explicitly. ✅

test/github-issues/10121/entity/estate.ts (1)

25-34:

Details

❌ Incorrect review comment

Relationship cardinality looks off – consider ManyToOne instead of OneToOne

An estate can reasonably belong to the same city/prefecture as many other estates, so the DB side is typically N-to-1. Declaring it @OneToOne forces 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 @ManyToOne is 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 || true

Length 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 || true

Length 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.

Copy link
Collaborator

@sgarner sgarner left a 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.

@yevhen-komarov yevhen-komarov force-pushed the fix-multiple-relations-same-column branch from a6ebb2d to 69973ef Compare June 16, 2025 04:41
Copy link
Contributor

@coderabbitai coderabbitai bot left a 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: Explicitly await the Promise.all to surface failures quicker

Mocha treats the returned Promise correctly, but adding await improves readability and guarantees that an accidental refactor (e.g., adding extra statements after Promise.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 the Order class

Using the capitalised Orders shadows the imported Order identifier 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 for country explicitly for clarity

countryId is 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

📥 Commits

Reviewing files that changed from the base of the PR and between 69973ef and e205139.

📒 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)

@yevhen-komarov yevhen-komarov force-pushed the fix-multiple-relations-same-column branch from e205139 to 56b80ea Compare June 16, 2025 11:55
import { Column, Entity, PrimaryColumn, Unique } from "../../../../../src"

@Entity()
@Unique(["id", "countryId"])
Copy link
Collaborator

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.

Copy link
Contributor Author

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"

Copy link
Collaborator

@alumni alumni Jun 16, 2025

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)

@yevhen-komarov yevhen-komarov force-pushed the fix-multiple-relations-same-column branch from 56b80ea to 4be90a1 Compare June 16, 2025 14:36
@yevhen-komarov
Copy link
Contributor Author

@alumni please restart the check or tell me how to do it

@alumni
Copy link
Collaborator

alumni commented Jun 16, 2025

@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 ;)

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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 the population column type to avoid platform-specific defaults

Relying on TypeORM’s type inference (number → DB‐specific integer) can lead to inconsistent precision/size across the test matrix (e.g., MySQL INT, Postgres INTEGER, SQLite REAL).
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

📥 Commits

Reviewing files that changed from the base of the PR and between 4be90a1 and 19f027c.

📒 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 good

Straight-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 for countryName foreign-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

@alumni alumni merged commit 63a3b9a into typeorm:master Jun 17, 2025
89 checks passed
@alumni
Copy link
Collaborator

alumni commented Jun 17, 2025

@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 :)

@yevhen-komarov yevhen-komarov deleted the fix-multiple-relations-same-column branch June 17, 2025 18:53
renatosugimoto added a commit to renatosugimoto/ts-nestjs-trainning that referenced this pull request Jul 22, 2025
![snyk-top-banner](https://res.cloudinary.com/snyk/image/upload/r-d/scm-platform/snyk-pull-requests/pr-banner-default.svg)


<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&#x3D;github&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)
> - 👩‍💻 [Set who automatically gets
assigned](https://app.snyk.io/org/renatosugimoto/project/31d5132a-e6b1-4b8a-a6a3-43b157a71ac5/settings/integration?utm_source&#x3D;github&amp;utm_medium&#x3D;referral&amp;page&#x3D;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&#x3D;github&amp;utm_medium&#x3D;referral&amp;page&#x3D;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&#x3D;typeorm&amp;utm_source&#x3D;github&amp;utm_medium&#x3D;referral&amp;page&#x3D;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]>
ThbltLmr pushed a commit to ThbltLmr/typeorm that referenced this pull request Dec 2, 2025
…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]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp: relations need review help its required for multiple people to review the issue or PR size-m Moderately complex tasks involving multiple steps. Estimated effort: Half a day to 1 day

Projects

Status: Done

8 participants