Невозможно сохранить объект: отдельная сущность передана для сохранения - PullRequest
0 голосов
/ 19 января 2012

Я использую 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;
    }
}

Не могли бы вы указать, где я иду не так?

1 Ответ

1 голос
/ 19 января 2012

Проблема в вашем Converter для класса Customer (который вы пропустили в вопросе, но он наверняка присутствует в вашем реальном коде). Похоже, вы вручную создаете new Customer() с идентификатором, а не получаете экземпляр Customer от менеджера сущностей по его идентификатору. Исправьте конвертер соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...