【问题标题】:Unable to persist object : detached entity passed to persist无法持久化对象:分离的实体传递给持久化
【发布时间】:2012-01-19 13:56:19
【问题描述】:

我在我的应用程序中使用 JSF - EJB3 - Hibernate JPA2.0。当我尝试保留新条目时,在其中一个屏幕中出现以下异常:

Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: info.novatec.timemgmt.entities.Customer

以下是我的代码块,可能会有所帮助,

查看:

<h:form>
  <h:panelGrid columns="2">
    <h:outputLabel value="Customer:" for="customer" />
    <h:selectOneMenu id="customer" value="#{projectController.selected.customer}" title="Customer" >
      <f:selectItems value="#{customerController.itemsAvailableSelectOne}"/>
    </h:selectOneMenu>
    <h:outputLabel value="Name:" for="name" />
    <h:inputText id="name" value="#{projectController.selected.name}" title="Name" />
    <p:calendar id="endDate" value="#{projectController.selected.endDate}" showOn="button" pattern="MM/dd/yyyy" size="10"/>
  </h:panelGrid>

托管豆

@ManagedBean
@SessionScoped
public class CustomerController implements Serializable {

    // ...

    public SelectItem[] getItemsAvailableSelectOne() {
            return JsfUtil.getSelectItems(ejbFacade.findAll(), true);
    }

    // ...
}

JSFUtil 助手类:

public class JsfUtil{

    public static SelectItem[] getSelectItems(List<?> entities, boolean selectOne) {
        int size = selectOne ? entities.size() + 1 : entities.size();
        SelectItem[] items = new SelectItem[size];
        int i = 0;
        if (selectOne) {
            items[0] = new SelectItem("", "---");
            i++;
        }
        for (Object x : entities) {
            items[i++] = new SelectItem(x, x.toString());
        }
        return items;
    }
}

你能指出我哪里出错了吗?

【问题讨论】:

  • 很抱歉,我为 JSF 插入的代码没有显示,但在我尝试编辑时可用。
  • 我已经编辑过了。以后提交消息前请注意消息编辑器下方的预览区,并阅读编辑器帮助中的消息格式规则。

标签: jpa jsf-2


【解决方案1】:

问题出在Customer 类的Converter 中(您在问题中省略了它,但它肯定存在于您的真实代码中)。您似乎正在手动构造一个带有 ID 的 new Customer(),而不是通过其 ID 从实体管理器获取 Customer 实例。相应地修复转换器。

【讨论】:

    猜你喜欢
    • 2019-03-02
    • 2013-06-26
    • 1970-01-01
    • 2017-04-01
    • 2018-09-22
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 2018-09-09
    相关资源
    最近更新 更多