2013-12-12 3 views
1

내 엔티티 업데이트 : '나는 영화 제목, 기간을 변경할 수 있습니다,하지만 난 할 수최대 절전 모드, 한 많은,

filmBo.updateFilm(lastEdited); 

모든 것이 작품을 좋아 : 나는 레코드를 수정하려고하면

@Entity 
public class Film { 
    @Id @GeneratedValue(strategy = IDENTITY) 
    private long filmId; 

    @ManyToOne 
    private Category category; 
    //... 
} 

@Entity 
public class Category implements Comparable { 
    @Id @GeneratedValue(strategy = IDENTITY) 
    private long id; 

    private String name; 

    @OneToMany(mappedBy = "category") 
    private List<Film> films; 
    // ... 
} 

을 카테고리 변경 ... 왜?

@EDIT 예, 영화 및 카테고리에는 엔티티 주석이 있습니다.

public void updateFilm(Film film) { 
    getHibernateTemplate().update(film); 
} 

는 그 후, 내가 제대로 영화 이름 및 기간 변경 만 카테고리는

   <h:selectOneMenu value="#{c.category.name}" rendered="#{c.editable}"> 
        <f:selectItems value="#{category.getCategoriesList()}" var ="cat" 
            itemLabel="#{cat.name}" 
            itemValue="#{cat.name}"/> 
       </h:selectOneMenu> 

       <h:outputText value="#{c.category.name}" rendered="#{not c.editable}" /> 
      </h:column> 

      <h:column> 

       <f:facet name="header">Action</f:facet> 

       <h:commandLink value="Edit" action="#{film.editAction(c)}" 
           rendered="#{not c.editable}" /> 

      </h:column> 
+0

나는 그것을'Film'에'@ Entity' 주석을 달았습니까? 또한'Film.category'를 변경하려고하는 코드와'updateFilm'이 엔티티를 유지/병합/업데이트하는 방식을 보여주십시오. – mabi

+0

영화의 새로운 '카테고리'를 선택하려고하거나 카테고리의 이름을 변경하려고하십니까? – mabi

+0

예 : 추가 : System.out.println ("AAAAAAAAAAAAAAAAAAAA + lastEdited.getCategory(). getName()); saveAction()에서 새 범주를 작성하지만 업데이트 후에도 여전히 이전 범주가 있습니다 – user2519456

답변

2

내가 아주 당신을 정말로 믿는 게 아니에요

카테고리 (변경되지 않은) 나이에서 까지 카테고리 이름을 변경하십시오. 하지만 당신의 문제는 Hibernate가 당신이 업데이트하도록 지시하는 엔티티 만 업데이트함으로써 야기된다. 그것은 다른 (변경) 엔티티를 처리하려면, 당신은 너무 좋아, 그것을 알려줄 필요가 :

@Entity 
public class Film { 
    @Id @GeneratedValue(strategy = IDENTITY) 
    private long filmId; 

    @ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE }) 
    private Category category; 
    //... 
} 

편집 : 당신은 단지 법인을 전환하려는 때문에, 당신이 당신의 XHTML을 변경해야합니다, too

<h:selectOneMenu value="#{c.category}" rendered="#{c.editable}"> 
    <f:selectItems value="#{category.categoriesList}" var ="cat" 
        itemLabel="#{cat.name}" /> 
    <f:converter converterId="omnifaces.SelectItemsIndexConverter" /> 
</h:selectOneMenu> 

값이 개체가되었으므로 변환기가 필요합니다. omnifaces 'SelectItemsIndexConverter을 사용하고 있습니다. 페이지 수명 동안 categoriesList의 순서가 일정하게 유지된다고 가정합니다. 설명서를 참조하거나 자신의 변환기를 제공하십시오. selectOneMenu tag wiki도 도움이 될 수 있습니다.

+0

CascadeType.PERSIST, CascadeType.MERGE를 추가했지만 문제가 여전히 존재합니다. 카테고리를 변경할 가능성이 없습니다. – user2519456

+0

I 엔티티 필름의 필름 카테고리를 변경하고 싶습니다 (카테고리 ID의 필름 테이블에서 외래 키를 변경하고 싶습니다) – user2519456

+0

@ user2519456 답변을 업데이트했습니다. 그게 도움이됩니까? – mabi