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!");
}
. Таким образом, приведенный выше код позволяет изменять или обновлять две таблицы, поэтому нет необходимости писать дополнительный код или! вам даже не нужно вызывать функцию сохранения в учетной записи или связанном с ней сотруднике из-за управляемого состояния объекта. Я предлагаю вам посмотреть несколько небольших примеров, используя JPA / Hibernate, и вы увидите, как это сделать, что вы думаете. Начало здесь .