我打算编写一个使用Spring Data JPA作为持久层的多租户感知应用程序。但是我不打算为每个租户保留单独的数据库,而是将所有数据都放在一个数据库中。以下豆代表我打算实施的项目实体和租户实体。在获取项目或获取所有项目列表时,我应该能够根据特定租户进行过滤。我知道我可以通过编写像bindByIdAndTenant_Id(int id,int id)这样的方法来实现这一点,但我担心解决方案的可伸缩性。我需要的是有一个像findById(int id)这样的方法,并且内容将被从上下文中获取的tenant id自动过滤。有没有办法在Spring Data JPA中做到这一点?在Spring数据上实现多租户JPA
项目实体
public class Project {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private int id;
@Column(name = "NAME")
private String name;
@Column(name = "DESCRIPTION")
private String description;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "TENANT_ID", referencedColumnName = "id", foreignKey = @ForeignKey(name = "FK_TENANT_IN_PROJ"))
private Tenant tenant;}
租客实体
public class Tenant {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
int id;
@Column(name = "NAME", unique = true)
private String name;}
您可以尝试使用作为某些JPA实现的扩展提供的多租户功能(请参阅例如https://wiki.eclipse.org/EclipseLink/Examples/JPA/Multitenant和here:https:// docs。 jboss.org/hibernate/orm/5.0/userguide/html_single/chapters/multitenancy/MultiTenancy.html)。在撰写本文时,您的用例(即使用鉴别器列)在Hibernate中未实现。但是,它在EclipseLink中得到了支持。 – crizzis