Постоянное значение только во вторичной таблице
У кого-нибудь есть пример того, как сохранить значения только во вторичной таблице?
@Entity
@Named("account")
@Table(name = "ACCOUNT", uniqueConstraints = {})
@SecondaryTables({ @SecondaryTable(name = "ACCOUNTCOMMENT", pkJoinColumns = { @PrimaryKeyJoinColumn })) {
...
@Column(table = "ACCOUNTCOMMENT", name = "COMMENTS", unique = false, nullable = true, insertable = true, updatable = true, length = 4000)
public String getComment() {
return this.comment;
}
public void setComment(String comments) {
this.comment = comments;
}
@Temporal(TemporalType.TIMESTAMP)
@Column(table = "ACCOUNTCOMMENT", name = "LAST_EDITED", unique = false, nullable = true, insertable = true, updatable = true, length = 7)
public Date getCommentLastEdited() {
return this.commentLastEdited;
}
public void setCommentLastEdited(Date lastEdited) {
this.commentLastEdited = lastEdited;
}
@Column(table = "ACCOUNTCOMMENT", name = "LAST_EDITOR_EMPLOYEE_ID", unique = false, nullable = true, insertable = true, updatable = true, length = 10)
public String getCommentLastEditorEmployeeId() {
return this.commentLastEditorEmployeeId;
}
public void setCommentLastEditorEmployeeId(String lastEditorEmployeeId) {
this.commentLastEditorEmployeeId = lastEditorEmployeeId;
}
....
}
Я пытаюсь обновить значения только во вторичной таблице (AccountComment
). Я использую Hibernate 4 и JPA2.
Пробовал следующий код,
@Transactional
public void saveAccountComment() throws SystemException {
System.out.println("Entered into saveAccountComments method...");
Account acct = acctInfo.getAccount();
acct.setComment(accountForm.getCommentText());
Date lastEdited = new Date();
acct.setCommentLastEdited(lastEdited);
Officer lastEditor = utils.getOfficer();
acct.setCommentLastEditorEmployeeId(lastEditor.getEmployeeId());
accountForm.setLastEditDate(lastEdited);
accountForm.setLastEditor(lastEditor.getEmpIdAndFullName());
em.persist(acct);
}
Это не работает. Также нет журнала ошибок. Когда я позвонил saveAccountComment()
метод. Это просто застряло.
У кого-нибудь есть идеи, как сохранить значения только во вторичной таблице?
2 ответа
Я нашел решение для моей проблемы. Следующий код помог сохранить объект учетной записи.
@Transactional
public void saveAccountComment() throws SystemException {
Date lastEdited = new Date();
Officer lastEditor = utils.getOfficer();
accountForm.setLastEditDate(lastEdited);
accountForm.setLastEditor(lastEditor.getEmpIdAndFullName());
Query q = em.createNamedQuery("findAccountByAccountKey").setParameter("accountKey", acctInfo.getAccount().getAccountKey());
Account account = (Account) q.getSingleResult();
account.setCommentLastEdited(lastEdited);
account.setCommentLastEditorEmployeeId(lastEditor.getEmployeeId());
account.setComment(accountForm.getCommentText());
em.persist(account);
}
Вместо сохранения объекта Account непосредственно передайте идентификатор (в моем случае ключ учетной записи) и получите объект, установите значения и сохраните.
Поскольку возможно иметь несколько независимых классов, сопоставленных с одной и той же таблицей, можно сопоставить другой отдельный класс сущностей с вторичной таблицей (id является столбцом соединения). Таким образом, вы можете использовать эту сущность в ситуациях, когда вы хотите выполнять операции только с данными вторичной таблицы.
Однако, независимо от выбранного вами подхода, вы можете пересмотреть свой текущий дизайн. Если необходимо обрабатывать первичные и вторичные таблицы отдельно, может быть лучше вообще не использовать вторичные таблицы, а две отдельные связанные сущности.