首页 > 解决方案 > 我们可以使用 Hibernate 插入/更新多个表吗

问题描述

我使用 JPA 和 Hibernate 创建了一个数据库。有一个名为 CHECKPOINT 的表,它有四个外键,这意味着它通过一对一的关系链接到 4 个不同的表。
有没有办法在其他四个表中插入/更新数据,而无需为每个表编写单独的查询,并且每当我在 CHECKPOINT 表中插入或更新数据时获取我的检查点表的所有四个外键?

标签: hibernatejpa

解决方案


Jpa 和 Hibernate 是 ORMS,这意味着您感觉和使用对象而不是数据库本身。如果你的问题,是的,这是可能的。考虑这个例子:

@Entity(name = "ForeignKeyAssAccountEntity")
@Table(name = "ACCOUNT", uniqueConstraints = {
        @UniqueConstraint(columnNames = "ID")})
public class AccountEntity implements Serializable 
{

    private static final long serialVersionUID = -6790693372846798580L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID", unique = true, nullable = false)
    private Integer accountId;

    @OneToOne(mappedBy="account")
    private EmployeeEntity employee;

    @Column(name = "ACC_NUMBER", unique = true, nullable = false, length = 100)
    private String accountNumber;

    public Integer getAccountId() {
        return accountId;
    }

    public void setAccountId(Integer accountId) {
        this.accountId = accountId;
    }

    public EmployeeEntity getEmployee() {
        return employee;
    }

    public void setEmployee(EmployeeEntity employee) {
        this.employee = employee;
    }

    public String getAccountNumber() {
        return accountNumber;
    }

    public void setAccountNumber(String accountNumber) {
        this.accountNumber = accountNumber;
    }
}

和员工实体:

@Entity(name = "ForeignKeyAssEmployeeEntity")
@Table(name = "Employee", uniqueConstraints = {
        @UniqueConstraint(columnNames = "ID"),
        @UniqueConstraint(columnNames = "EMAIL") })
public class EmployeeEntity implements Serializable {

    private static final long serialVersionUID = -1798070786993154676L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID", unique = true, nullable = false)
    private Integer employeeId;

    @Column(name = "EMAIL", unique = true, nullable = false, length = 100)
    private String email;

    @Column(name = "FIRST_NAME", unique = false, nullable = false, length = 100)
    private String firstName;

    @Column(name = "LAST_NAME", unique = false, nullable = false, length = 100)
    private String lastName;

    @OneToOne
    @JoinColumn(name="ACCOUNT_ID")
    private AccountEntity account;

    public Integer getEmployeeId() {
        return employeeId;
    }

    public void setEmployeeId(Integer employeeId) {
        this.employeeId = employeeId;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public AccountEntity getAccount() {
        return account;
    }

    public void setAccount(AccountEntity account) {
        this.account = account;
    }
}

*我想指出这是一对一的关系。现在你可以看到这是两个有关系的独立表。现在我可以使用休眠并访问这两个表并进行更改,然后休眠将匹配我对数据库所做的任何事情。想象一下,Id=1 的帐户与 Id=1 的员工是一对一的关系:

@Transactional
public void testUpdates(){
    Account account=entityManager.loadById(Account.class,1);
    account.setAccountNumber("123456");//setting a new number!
    account.getEmployee().setFirstName("a new name!");
}

所以上面的代码可以让你更改或更新这两个表,也不需要编写额外的代码!由于实体的托管状态,您甚至不需要调用 save on account 或其关联的员工。我建议您查看一些使用 JPA/Hibernate 的小示例,您将了解如何按照您的想法进行操作。从这里开始。


推荐阅读