[英]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.