Постоянное значение только во вторичной таблице

У кого-нибудь есть пример того, как сохранить значения только во вторичной таблице?

@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 является столбцом соединения). Таким образом, вы можете использовать эту сущность в ситуациях, когда вы хотите выполнять операции только с данными вторичной таблицы.

Однако, независимо от выбранного вами подхода, вы можете пересмотреть свой текущий дизайн. Если необходимо обрабатывать первичные и вторичные таблицы отдельно, может быть лучше вообще не использовать вторичные таблицы, а две отдельные связанные сущности.

Другие вопросы по тегам