I'm not sure if I understand what your actual question is, nor whether
it is particularly Struts 2 related (rather than just Hibernate) - but
you might want to have a look in the CRUD demo section of the Struts 2
showcase application. Maybe you will also find this demo useful:
http://github.com/rgielen/struts2crudevolutiondemo
- René
bruno grandjean schrieb:
> Hi
>
> I am trying to implement a simple CRUD with a OneToMany association under
> Struts 2 / Hibernate 3.
> I have two entities Parent and Child:
>
> @Entity
> @Table(name="PARENT")
> public class Parent {
> private Long id;
> private Set<Child> values = new HashSet<Child>();
> ..
> @Entity
> @Table(name="CHILD")
> public class Child {
> private Long id;
> private String name;
> ..
>
> I can easily create, delete Parent or read the Child Set (values) but it is
> impossible to update Child Set.
> The jsp page (see below) reinit the values Set, no record after updating!
> Could u explain to me what's wrong?
>
> here are my code:
>
> @Entity
> @Table(name="PARENT")
> public class Parent {
> private Long id;
> private Set<Child> values = new HashSet<Child>();
> @Id
> @GeneratedValue
> @Column(name="PARENT_ID")
> public Long getId() {
> return id;
> }
> public void setId(Long id) {
> this.id = id;
> }
> @ManyToMany(fetch = FetchType.EAGER)
> @JoinTable(name = "PARENT_CHILD", joinColumns = { @JoinColumn(name =
> "PARENT_ID") }, inverseJoinColumns = { @JoinColumn(name = "CHILD_ID") })
> public Set<Child> getValues() {
> return values;
> }
> public void setValues(Set<Child> lst) {
> values = lst;
> }
> }
>
> @Entity
> @Table(name="CHILD")
> public class Child {
> private Long id;
> private String name;
> @Id
> @GeneratedValue
> @Column(name="CHILD_ID")
> public Long getId() {
> return id;
> }
> public void setId(Long id) {
> this.id = id;
> }
> @Column(name="NAME")
> public String getName() {
> return name;
> }
> public void setName(String val) {
> name = val;
> }
> }
>
> public interface ParentDAO {
> public void saveOrUpdateParent(Parent cl);
> public void saveParent(Parent cl);
> public List<Parent> listParent();
> public Parent listParentById(Long clId);
> public void deleteParent(Long clId);
> }
>
> public class ParentDAOImpl implements ParentDAO {
> @SessionTarget
> Session session;
> @TransactionTarget
> Transaction transaction;
>
> @Override
> public void saveOrUpdateParent(Parent cl) {
> try {
> session.saveOrUpdate(cl);
> } catch (Exception e) {
> transaction.rollback();
> e.printStackTrace();
> }
> }
>
> @Override
> public void saveParent(Parent cl) {
> try {
> session.save(cl);
> } catch (Exception e) {
> transaction.rollback();
> e.printStackTrace();
> }
> }
>
> @Override
> public void deleteParent(Long clId) {
> try {
> Parent cl = (Parent) session.get(Parent.class, clId);
> session.delete(cl);
> } catch (Exception e) {
> transaction.rollback();
> e.printStackTrace();
> }
> }
>
> @SuppressWarnings("unchecked")
> @Override
> public List<Parent> listParent() {
> List<Parent> courses = null;
> try {
> courses = session.createQuery("from Parent").list();
> } catch (Exception e) {
> e.printStackTrace();
> }
> return courses;
> }
>
> @Override
> public Parent listParentById(Long clId) {
> Parent cl = null;
> try {
> cl = (Parent) session.get(Parent.class, clId);
> } catch (Exception e) {
> e.printStackTrace();
> }
> return cl;
> }
> }
>
> public class ParentAction extends ActionSupport implements
> ModelDriven<Parent> {
>
> private static final long serialVersionUID = -2662966220408285700L;
> private Parent cl = new Parent();
> private List<Parent> clList = new ArrayList<Parent>();
> private ParentDAO clDAO = new ParentDAOImpl();
>
> @Override
> public Parent getModel() {
> return cl;
> }
>
> public String saveOrUpdate()
> {
> clDAO.saveOrUpdateParent(cl);
> return SUCCESS;
> }
>
> public String save()
> {
> clDAO.saveParent(cl);
> return SUCCESS;
> }
>
> public String list()
> {
> clList = clDAO.listParent();
> return SUCCESS;
> }
>
> public String delete()
> {
> HttpServletRequest request = (HttpServletRequest)
> ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
> clDAO.deleteParent(Long.parseLong(request.getParameter("id")));
> return SUCCESS;
> }
>
> public String edit()
> {
> HttpServletRequest request = (HttpServletRequest)
> ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
> cl = clDAO.listParentById(Long.parseLong(request.getParameter("id")));
> return SUCCESS;
> }
>
> public Parent getParent() {
> return cl;
> }
>
> public void setParent(Parent cl) {
> this.cl = cl;
> }
>
> public List<Parent> getParentList() {
> return clList;
> }
>
> public void setParentList(List<Parent> clList) {
> this.clList = clList;
> }
> }
>
> and finally the jsp page:
>
> <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
> pageEncoding="ISO-8859-1"%>
> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
> "http://www.w3.org/TR/html4/loose.dtd">
> <%...@taglib uri="/struts-tags" prefix="s"%>
> <html>
> <head>
> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
> <title>Parent Registration Page</title>
> <s:head />
> <style type="text/css">
> @import url(style.css);
> </style>
> </head>
> <body>
> <s:form action="saveOrUpdateParent">
> <s:push value="parent">
> <s:hidden name="id" />
> <s:push value="values">
> <s:iterator id="p" value="values">
> <s:textfield label="Nom" name="values(%{id}).name" value="%{name}"/>
> </s:iterator>
> </s:push>
> <s:submit />
> </s:push>
> </s:form>
>
> <s:if test="parentList.size() > 0">
> <div class="content">
> <table class="userTable" cellpadding="5px">
> <tr class="even">
> <th>Child(s)</th>
> </tr>
> <s:iterator value="parentList" status="userStatus">
> <tr
> class="<s:if test="#userStatus.odd == true
> ">odd</s:if><s:else>even</s:else>">
> <td><s:property value="values.size()" /></td>
> <s:iterator value="values">
> <td><s:property value="name" /></td>
> </s:iterator>
> <td><s:url id="editURL" action="editParent">
> <s:param name="id" value="%{id}"></s:param>
> </s:url> <s:a href="%{editURL}">Edit</s:a></td>
> <td><s:url id="deleteURL" action="deleteParent">
> <s:param name="id" value="%{id}"></s:param>
> </s:url> <s:a href="%{deleteURL}">Delete</s:a></td>
> </tr>
> </s:iterator>
> </table>
> </div>
> </s:if>
> </body>
> </html>
>
--
René Gielen
IT-Neering.net
Saarstrasse 100, 52062 Aachen, Germany
Tel: +49-(0)241-4010770
Fax: +49-(0)241-4010771
Cel: +49-(0)163-2844164
http://twitter.com/rgielen
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]