删除实体关系后数据表未更新

时间:2016-07-12 08:07:31

标签: jsf primefaces

我有以下问题: 我有一张由Primefaces创建的表格。在此表中,我显示了@OneToMany关系的元素。用户单击一个名称,该表显示该客户的关联。这很好用。但是 - 用户应该从表中删除单个元素。所以每个条目都有一个删除按钮。现在的问题是: 如果我单击一个按钮,数据库中的条目将被正确删除,但我的表单更新始终显示该条目。那么我必须改变什么?

    <p:dataTable value="#{hauptBean.listeRisikotraeger.risikotraeger}"
                        var="tr" id="tab" styleClass="tabelle"
                        emptyMessage="Keine Risikoträger definiert"
                        rendered="#{not empty hauptBean.standardSelektion and(not empty hauptBean.listeRisikotraeger.risikotraeger and(!hauptBean.aenderung))}">
                        <p:column headerText="Risikoträger">
                            <h:outputText value="#{tr.name}" />
                        </p:column>
                        <p:column width="70">
                            <p:commandButton value="löschen"
                                actionListener="#{hauptBean.eintragLoeschen(tr)}"
                                update="@form" />
                        </p:column>
                    </p:dataTable>

第一个实体

@Entity
public class Risikobereich implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String risikobereich;

@OneToMany(fetch=FetchType.EAGER)
@JoinColumn(name="ri_id", referencedColumnName="id")    
private List<Risikotraeger> risikotraeger;

[GETTER/SETTER]

实体关系:

@Entity
public class Risikotraeger implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id_risiko;

private String name;
private String abstraktesRisiko;

[GETTER/SETTER]

修改

这是我的会话Bean,它在后台完成所有工作:

@Override
public boolean loeschen(Risikotraeger traeger) {

    boolean erfolgreich = false;

    em.remove(em.merge(traeger));

    erfolgreich = true;

    return erfolgreich;
}

1 个答案:

答案 0 :(得分:0)

您是否重新加载listeRisikotraeger分别删除了该记录?

一个简短的建议:为什么在直接按删除按钮而不是数据表后更新@form?如果要更新的数据表旁边还有其他组件,我建议,在每个组件上定义一个ID并引用它们。因此,您可以减少应更新的页面元素的范围。例如:<p:datatable id=tableRisikotraeger .../> ... <p:commandButton value="löschen" update="tableRisikotraeger" .../>