簡體   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