我们可以使用Hibernate插入/更新多个表吗



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

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;
}
}

*我想指出的是,这是一种一对一的关系。现在,正如您所看到的,这是两个具有关系的独立表。现在我可以使用hibernate访问这两个表并进行更改,然后hibernate将匹配我对数据库所做的任何操作。假设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的小示例,您将了解如何做到您所想的。从这里开始。

相关内容

最新更新