Dear Adam,
 
I wrote a CascadeType.ALL in my @OneToMany annotation:
 

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
@JoinTable(name = "PARENT_CHILD", joinColumns = { @JoinColumn(name = 
"PARENT_ID") }, inverseJoinColumns = { @JoinColumn(name = "CHILD_ID") }) 
public Set<Child> getValues() { 
return values;}
 
but I got unfortunately the same result.
 
Before running the application I execute the following hsqldb script:
 
insert into CHILD (CHILD_ID, NAME) values (1, 'Child1');
insert into CHILD (CHILD_ID, NAME) values (2, 'Child2');
insert into PARENT (PARENT_ID, NAME) values (1, 'Parent1');
insert into PARENT_CHILD (PARENT_ID, CHILD_ID) values (1, 1);
insert into PARENT_CHILD (PARENT_ID, CHILD_ID) values (1, 2);

After that, in the jsp page I have no pb to modify the fields:
 
1
Nom: Parent1
Id: 1
Nom: Child1
Id: 2
Nom: Child 2

s:form action="saveOrUpdateParent">

<s:push value="parent">
<s:hidden name="id" /> 
<s:textfield name="name" label="Nom" />
<s:push value="values">
<s:iterator id="p" value="values">
<s:textfield label="Id" name="#id" value="%{id}" />
<s:textfield label="Nom" name="#name" value="%{name}"/>
</s:iterator>
</s:push>



<s:submit />


</s:push>
</s:form>
 
I do not modify any keys which are auto-generated with Hibernate annotations:

 

@Id
@GeneratedValue


Iin debug mode just after clicking the submit button the size of Child Set is 
0, I lost all my Child objects which is abnormal.
After running the session.saveOrUpdate(parent) method the hibernate trace is:
 


Hibernate: update PARENT set NAME=? where PARENT_ID=?
Hibernate: delete from PARENT_CHILD where PARENT_ID=?
 
So I am little bit lost because I do not know how to keep my Child Set alive..

 

All the best

 

Bruno


 
> From: apin...@hotmail.co.uk
> To: user@struts.apache.org
> Subject: RE: CRUD with a OneToMany association under Struts 2 / Hibernate 3
> Date: Thu, 1 Apr 2010 07:46:59 +0100
> 
> 
> 
> have you got the correct cascade setting on the parent object
> 
> i use the xml files for hibernate rather than the @ syntax in java classes 
> and i can set cascade="all" which means when i save/update the parent the 
> children are also saved or updated.
> 
> also remember that for hibernate to realise the children need to be updated 
> rather than saved, the child object needs to have a primary key set otherwise 
> it will want to do a save ... and if cascade was only update then nothing 
> would be done with child objects.
> 
> turn on debugging of sql in hibernate config file to see if any sql to 
> update/save children is actually being created.
> 
> 
> 
> ----------------------------------------
> > From: brgrandj...@live.fr
> > To: user@struts.apache.org
> > Subject: Re: CRUD with a OneToMany association under Struts 2 / Hibernate 3
> > Date: Wed, 31 Mar 2010 22:15:34 +0200
> >
> > Dear Rene,
> >
> > Thks a lot for replying to me because I am feeling a little bit alone with
> > my CRUD ;-). In fact I am trying to build a dynamic MetaCrud.
> > My pb is simple: in the same jsp page I would like to update a Parent object
> > and its Childs (values):
> >
> > 
> > 
> >> name="name" label="Nom" />
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> >
> > From an existing Parent object with many Childs objects I can easily modify
> > parent.name for instance but the collection of Child objects (values) is
> > always empty in the ParentAction (saveOrUpdate() method) after submitting.
> > However I can display each values[i].name in the jsp page with the correct
> > value.
> > So it is not an issue with Hibernate but with the jsp or ModelDriven
> > interface I don't know..Do you have any idea?
> > Basically I was not able to find a struts or spring documentation about CRUD
> > & association between two entities on the same jsp page.
> > best regards
> > bruno
> >
> >
> >
> > --------------------------------------------------
> > From: "Rene Gielen" 
> > Sent: Wednesday, March 31, 2010 7:12 PM
> > To: "Struts Users Mailing List" 
> > Subject: Re: CRUD with a OneToMany association under Struts 2 / Hibernate 3
> >
> >> 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 values = new HashSet();
> >>> ..
> >>> @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 values = new HashSet();
> >>> @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 getValues() {
> >>> return values;
> >>> }
> >>> public void setValues(Set 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 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 listParent() {
> >>> List 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 {
> >>>
> >>> private static final long serialVersionUID = -2662966220408285700L;
> >>> private Parent cl = new Parent();
> >>> private List clList = new ArrayList();
> >>> 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 getParentList() {
> >>> return clList;
> >>> }
> >>>
> >>> public void setParentList(List clList) {
> >>> this.clList = clList;
> >>> }
> >>> }
> >>>
> >>> and finally the jsp page:
> >>>
> >>> 
> >>>>>> "http://www.w3.org/TR/html4/loose.dtd";>
> >>> 
> >>> 
> >>> 
> >>> 
> >>> 
> >>> 
> >>> 
> 
> 
> >>> 
> >>> 
> >>> 
> >>> 
> >>> 
> >>> 
> >>> 
> >>> 
> >>> 
> >>> 
> >>> 
> >>> 
> >>> 
> >>>
> >>> 
> >>> 
> 
> >>> 
> 
> >>> 
> 
> 
> >>> 
> Child(s)
> >>> 
> 
> >>> 
> >>>>>> class="oddeven">
> >>> 
> 
> 
> >>> 
> >>> 
> 
> >>> 
> >>> 
> 
> >>> 
> >>> Edit
> >>> 
> 
> >>> 
> >>> Delete
> >>> 
> 
> >>> 
> >>> 
> >>> 
> >>> 
> >>> 
> >>> 
> >>>
> >>
> >> --
> >> 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: user-unsubscr...@struts.apache.org
> >> For additional commands, e-mail: user-h...@struts.apache.org
> >>
> >>
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
> > For additional commands, e-mail: user-h...@struts.apache.org
> > 
> _________________________________________________________________
> We want to hear all your funny, exciting and crazy Hotmail stories. Tell us 
> now
> http://clk.atdmt.com/UKM/go/195013117/direct/01/
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
> For additional commands, e-mail: user-h...@struts.apache.org
> 

                                          
_________________________________________________________________
Consultez gratuitement vos emails Orange, Gmail, Free, ... directement dans 
HOTMAIL !
http://www.windowslive.fr/hotmail/agregation/

Reply via email to