hibernate - 我们可以使用 Hibernate 插入/更新多个表吗
问题描述
我使用 JPA 和 Hibernate 创建了一个数据库。有一个名为 CHECKPOINT 的表,它有四个外键,这意味着它通过一对一的关系链接到 4 个不同的表。
有没有办法在其他四个表中插入/更新数据,而无需为每个表编写单独的查询,并且每当我在 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;
}
}
*我想指出这是一对一的关系。现在你可以看到这是两个有关系的独立表。现在我可以使用休眠并访问这两个表并进行更改,然后休眠将匹配我对数据库所做的任何事情。想象一下,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 的小示例,您将了解如何按照您的想法进行操作。从这里开始。
推荐阅读
- laravel - 基于父表 LARAVEL 上的字段对元素进行分组
- android-layout - 在 adjustResize 期间不要折叠过去的 wrapContent
- amazon-web-services - 限制启用 VPC 的 Lambda 的 ENI 权限
- python - 使用 rest-framework 以 CSV 格式导出一个巨大的 django 查询集
- powershell - 将 Invoke-WmiMethod 命令转换为 Invoke-CimMethod 命令
- javascript - 如何在命令处理程序中运行嵌入命令
- javascript - 在 ReactJS 上使用 Props 打开和关闭对话框?我的模态保持打开而不关闭
- vba - VBA 继续编号列表
- python - 将 PyCuda 代码转换为 PyOpenCL 代码:如何执行大量 3x3 矩阵求逆?
- r - ggplot的限制轴