[英]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 實體,每個實體都指向不同的表,如下所示,假設兩個表名是users
和app_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.