2012-01-19 17 views
0

私のアプリケーションで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> 

マネージドBean

@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; 
    } 
} 

どこが間違っているかを教えてください。

+0

申し訳ありませんが、JSF用に挿入したコードは表示されませんが、編集しようとすると利用可能です。 – Bala

+0

私はすでにそれを編集しました。将来、メッセージを送信する前に、メッセージエディタの下にあるプレビュー領域に注意し、エディタのヘルプでメッセージのフォーマット規則を読んでください。 – BalusC

答えて

1

Customerクラスについては、Converterに問題があります(この質問は省略しましたが、実際のコードには必ずあります)。エンティティマネージャからそのIDでCustomerインスタンスを取得する代わりに、手動でIDを持つnew Customer()を作成しているようです。それに応じてコンバータを修正してください。

関連する問題