【问题标题】:Persist value only in secondary table仅在辅助表中保留值
【发布时间】:2016-05-20 13:47:29
【问题描述】:

任何人都有如何将值仅保留在辅助表中的示例?

@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) 中的值。我正在使用休眠 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() 方法时。它只是卡住了。

有人知道如何将值仅保留在辅助表中吗?

【问题讨论】:

    标签: java hibernate jpa-2.0 deltaspike-jpa


    【解决方案1】:

    我找到了解决问题的方法。以下代码有助于持久化帐户对象。

    @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(在我的例子中是帐户键)并检索对象并设置值并持久化。

    【讨论】:

      【解决方案2】:

      由于可以将多个独立的类映射到同一个表,您可以将另一个单独的实体类映射到辅助表(id 是连接列)。这样,您可以在只想对辅助表数据进行操作的情况下使用该实体。

      但是,无论您采用何种方法,您都可能需要重新考虑当前的设计。如果需要分别处理主表和辅助表,最好不要使用辅助表,而是使用两个独立的关联实体。

      【讨论】:

        猜你喜欢
        • 2022-11-23
        • 2016-12-12
        • 2018-12-08
        • 2014-05-04
        • 1970-01-01
        • 2019-08-19
        • 2021-01-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多