簡體   English   中英

休眠,多對一,更新

[英]Hibernate, many to one, update

我的實體:

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

當我嘗試修改記錄時:

filmBo.updateFilm(lastEdited);

一切正常,我可以更改電影的標題,時長,但不能更改類別...為什么?

@EDIT是的,電影和類別具有Entity批注。

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>

我不太相信您真的打算 更改類別名稱。 但是您的問題是由Hibernate僅更新您告訴它要更新的實體引起的。 為了使其能夠處理其他(更改的)實體,您需要像這樣告訴它:

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

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

編輯:由於您只想切換實體,因此您也需要更改xhtml:

<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 標簽Wiki很有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM