あなたの助けが必要です
ManagedBean があります
@ManagedBean @SessionScoped public class ComponentController implements Serializable { private static final long serialVersionUID = 373631006594351707L; @EJB IComponentService componentService; @EJB IDocumentService documentService; private Component component; private DocumentEntity document; public String createAndClose() { componentService.save(component); FacesMessage msg = new FacesMessage("Component added.", null); FacesContext.getCurrentInstance().addMessage(null, msg); component = new Component(); return "components"; } public String saveAndClose() { componentService.update(component); FacesMessage msg = new FacesMessage("Component updated.", null); FacesContext.getCurrentInstance().addMessage(null, msg); component = new Component(); return "components"; } public String createView() { component = new Component(); return "create"; } }
私はこのような一般的なdaoサービスを持っています
public abstract class GenericJpaService<T extends BaseEntity, ID extends Serializable> implements IGenericService<T, ID> { @PersistenceContext EntityManager em; private Class<T> persistentClass; public GenericJpaService() { } public GenericJpaService(Class<T> persistentClass) { this.persistentClass = persistentClass; } public Class<T> getPersistentClass() { return persistentClass; } public void setPersistentClass(Class<T> persistentClass) { this.persistentClass = persistentClass; } @Override public T save(T entity) { this.em.persist(entity); this.em.flush(); this.em.refresh(entity); Logger.getLogger(GenericJpaService.class.getName()).log(Level.INFO, "Object {0} saved to DB", entity); return entity; } @Override @SuppressWarnings("unchecked") public T update(T entity) { Logger.getLogger(GenericJpaService.class.getName()).log(Level.INFO, "Object {0} updated in DB", entity); return (T) this.em.merge(entity); } ... }
したがって、最初にアプリケーションを実行するときに、リンクAdd componentをクリックします。それは実行します:
public String createView()
- そこにいくつかのデータを追加し、いくつかのファイルをアップロードします...
- 次に、保存して閉じるボタンをクリックします。それは実行します:
public String createAndClose()
- 正常にデータをデータベースに保存しました。
そして、これをもう一度実行すると、以前に保存したデータが表示されるという問題があります。デバッグしましたが、どこに設定されているのかわかりません。後
public String createView()
jsf ページには new Component() を使用する必要があります。では、どこで私は間違いを犯しますか?私はまだ理解していませんか?プレーンJPAの代わりにHibernateを使用する必要がありますか?以前は(Hibernate)使用していたので、(HibernateUtil を使用すると)簡単になりました。
PS。「new Component()」の複数のインスタンスで申し訳ありませんが、どこにでも配置しようとしています...