繁体   English   中英

使用 Jpa 在不同的表(相同的模式)中保存相同的实体

[英]Saving same entity in different tables(same schema) using Jpa

我使用 spring 数据 JPA 存储库将数据保存到我的表中。

在一种情况下,我必须将数据存储在两个不同的表中。 这两个表具有完全相同的架构。 但是我只能存储在一张表中,因为 JpaRepository 只映射到一张表。

例子:

@Entity
@Table(name="users")
class User {
  private Long userId;
  private String firstName;
  private String lastName;
}

interface MyRepo1 extends JpaRepositories<User,Long> {
}

interface MyRepo2 extends JpaRepositories<User,Long> {
}

有没有办法将单个实体映射到多个 JpaRepositories? 因此,当我调用 MyRepo1.save(user) 时,它保存在 Users 表中,当我调用 MyRepo2.save(user) 时,它保存在 BackupUsers(与用户完全相同的架构)表中。

谢谢

您应该有两个不同的实体,例如 User 实体 AppUser 实体,每个实体都指向不同的表,如下所示,假设两个表名是usersapp_users

@Entity
@Table(name="users")
public class User extends SuperUser {...}

@Entity
@Table(name="app_users")
public class AppUser extends SuperClass {...}

当然,为了避免代码重复,您可以将表字段放在名为SuperClass的超类中,例如:

    @Entity
    @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
    public class SuperUser {
      @Id
      private Long userId;
      private String firstName;
      private String lastName;
      // getters and setters, constructors
    }

之后,您需要为每个实体类创建两个存储库:

public interface UserRepository extends JpaRepositories<User, Long> {
}

public interface AppUserRepository extends JpaRepositories<AppUser,Long> {
}

注意:最后,完全不建议拥有两个包含相同字段的表。

我不认为你可以用两个不同的存储库保存在不同的表中,因为你不能在存储库中指定表名,但在实体中,我建议使用:

// class which hold common fields
class User {
  private Long userId;
  private String firstName;
  private String lastName;
}

// entity for table 1
@Entity
@Table(name="table1")
class User1 extends User {}

// entity for table 1
@Entity
@Table(name="table2")
class User2 extends User {}

// repo for entity 1
interface MyRepo1 extends JpaRepositories<User1,Long> {}

// repo for entity 2
interface MyRepo2 extends JpaRepositories<User2 ,Long> {}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM