spring-data-relational icon indicating copy to clipboard operation
spring-data-relational copied to clipboard

Remove caching for table, schema and column names using SpEL expressions

Open goafabric opened this issue 2 years ago • 1 comments

This is a followup to https://github.com/spring-projects/spring-data-relational/pull/1461

While the above ticket successfully enables SpEL for Table and Schema, allowing us to have a lightweight solution for Multi Tenancy / Multi Schema, it only works for queries / select statements. (e.g. select .. from tenant_0, select ... from tenant_5)

For inserts, it will always use the first spel expression that was resolved (e.g. always insert into tenant_0)

A lightweight alternative to achieve the goal of multi schema, could have been the NamingStrategy. Unfortunately, this also gets Cached inside the CachingNamingStrategy and also evaluated only once.

Having a solution for either one of these, would be awesome.

Thx in advance

-- cut examples ---

https://github.com/table(name = "insurance", schema = "#{@tenantIdBean.getPrefix()}")

https://github.com/component public class TenantIdBean { public String getPrefix() { return "tenant_" + HttpInterceptor.getTenantId(); } }

goafabric avatar Jun 30 '23 13:06 goafabric

The same problem probably appears for standard CrudRepository methods like findAll and findById and so on.

I think we should have some way to configure the Memoization of SQL statements with three options: NONE, ALWAYS and DYNAMIC, where the last checks if SpEL expressions are used and only uses memoization when none is.

schauder avatar Jul 04 '23 06:07 schauder