By the way, i forgot to mention that the Activity row is actually saved into
the database correctly, but i get the error when trying to persist the
WeekActivity entity, so the WeekActivity table is always empty...

Best regards.


Sielm wrote:
> 
> Hi again. Here are the details i've worked on so far:
> 
> /**
>  * @hibernate.class table="activity"
>  */
> public class Activity extends PersistentObject {
>               
>       private String name;
>       private Float mondayHours;
>       private Float tuesdayHours;
>       private Float wednesdayHours;
>       private Float thursdayHours;
>       private Float fridayHours;
>       private Float saturdayHours;
>       private Float sundayHours;
>       
>       /**
>        * @hibernate.id column="id" generator-class="native"
>        */
>       public String getId() {
>           return super.getId();
>       }
>       
>       /**
>        * @hibernate.property column="name"
>        * @return the name
>        */
>       public String getName() {
>               return name;
>       }       
>       
>       /**
>        * @hibernate.property column="monday_hours"
>        * @return mondayHours
>        */
>       public Float getMondayHours() {
>               return mondayHours;
>       }
>  
>       /**
>        * @spring.validator type="required"
>        * @spring.validator type="maxlength"
>        * @spring.validator-args arg1value="${var:maxlength}" 
>        * @spring.validator-var name="maxlength" value="100" 
>        * @param name the name to set
>        */
>       public void setName(String name) {
>               this.name = name;
>       }       
>       
>       /**
>        * @spring.validator type="float"
>        * @spring.validator type="floatRange" msgkey="errors.mondayhours.range"
>        * @spring.validator-args arg1value="${var:min}"
>        * @spring.validator-args arg2value="${var:max}" 
>        * @spring.validator-var name="min" value="0.5"
>        * @spring.validator-var name="max" value="8.0" 
>        * @param mondayHours the mondayHours to set
>        */
>       public void setMondayHours(Float mondayHours) {
>               this.mondayHours = mondayHours;
>       }
> 
> ------------------------------------------------------------------------------------------------
> 
> I just included 2 of the setter/getter methods because they are all
> similar. On the other side, i have the other class, the big one,
> WeekActivity:
> 
> /**
>  * @hibernate.class table="week_activity"
>  */
> public class WeekActivity extends PersistentObject{
> 
>       private User user;
>       private Week week;
>       private Activity activity = new Activity();
>       private Boolean isAuthorized = Boolean.FALSE;
>       
>       /**
>        * @hibernate.id column="id" generator-class="native"
>        */
>       public String getId() {
>           return super.getId();
>       }
> 
>       /**
>        * @hibernate.one-to-one cascade="save-update"
>        * @return the activity
>        */
>       public Activity getActivity() {
>               return activity;
>       }
> 
>       /**
>        * @hibernate.property column="is_authorized"
>        * @return the isAuthorized
>        */
>       public Boolean getIsAuthorized() {
>               return isAuthorized;
>       }
> 
>       /**
>        * @hibernate.many-to-one column="user_id" cascade="save-update"
>        * @return the user
>        */
>       public User getUser() {
>               return user;
>       }
> 
>       /**
>        * @hibernate.many-to-one column="week_id" cascade="save-update"
>        * @return the week
>        */
>       public Week getWeek() {
>               return week;
>       }
>       
>       /**
>        * @spring.validator type="required"
>        * @param activity the activity to set
>        */
>       public void setActivity(Activity activity) {
>               this.activity = activity;
>       }
> 
>       /**
>        * @spring.validator type="required"
>        * @param isAuthorized the isAuthorized to set
>        */
>       public void setIsAuthorized(Boolean isAuthorized) {
>               this.isAuthorized = isAuthorized;
>       }
> 
>       /**
>        * @spring.validator type="required"
>        * @param user the user to set
>        */
>       public void setUser(User user) {
>               this.user = user;
>       }
> 
>       /**
>        * @spring.validator type="required"
>        * @param week the week to set
>        */
>       public void setWeek(Week week) {
>               this.week = week;
>       }       
> }
> 
> ------------------------------------------------------------------------------------------------
> 
> Like i said previously, when i try to save the whole WeekActivity from the
> jsp, i fill the user.id and week.id fields on the onSubmit method in the
> WeekActivityFormController. But, i am not able to also persist the
> activity (so it gets a newly generated ID each time) before that. And i
> need to do this because i need a new activity.id each time i fill the
> WeekActivity form (the activity.id will be unique in the WeekActivity
> table). This is what i have so far in the controller:
> 
> protected void onBind(HttpServletRequest request, Object command,
>                       BindException errors) throws Exception {
> 
>               super.onBind(request, command);
> 
>               WeekActivity weekActivity = (weekActivity) command;
> 
>                 // Here we get parameters to fill in User and Week
> objects...
>               String userId = request.getParameter("user.id");
>               String weekId = request.getParameter("week.id");
> 
>               // We obtain the User and Week from the request parameters
>                 // because User and Week are already in the database...
>               if (userId != null) {
> 
>                       if (weekActivity.getUser() == null) {
> 
>                               User user = (User) manager.get(User.class, 
> userId);
>                               weekActivity.setUser(user);
>                       }
>               }
> 
>               if (weekId != null) {
> 
>                       if (weekActivity.getWeek() == null) {
> 
>                               Week week = (Week) manager.get(Week.class, 
> weekId);
>                               weekActivity.setWeek(week);
>                       }
>               }
>               
>               // Now i try to set the corresponding Activity object too...
>               Activity theActivity = weekActivity.getActivity();
> 
>                 // Setting Activity properties from parameters too (except
> the ID!)
>               String activityName = request.getParameter("activity.name");
>               if (activityName != null && 
> (!StringUtils.isEmpty(activityName.trim())))
> {
>                       theActivity.setName(activityName);
>               }
> 
>               String activityMon = 
> request.getParameter("activity.mondayHours");
>               if (activityMon != null && 
> (!StringUtils.isEmpty(activityMon.trim()))) {
>                       theActivity.setMondayHours(new 
> Float(Float.parseFloat(activityMon)));
>               }
> 
>               String activityTue = 
> request.getParameter("activity.tuesdayHours");
>               if (activityTue != null && 
> (!StringUtils.isEmpty(activityTue.trim()))) {
>                       theActivity.setTuesdayHours(new 
> Float(Float.parseFloat(activityTue)));
>               }
> 
>               String activityWed = 
> request.getParameter("activity.wednesdayHours");
>               if (activityWed != null && 
> (!StringUtils.isEmpty(activityWed.trim()))) {
>                       theActivity.setWednesdayHours(new
> Float(Float.parseFloat(activityWed)));
>               }
> 
>               String activityThu = 
> request.getParameter("activity.thursdayHours");
>               if (activityThu != null && 
> (!StringUtils.isEmpty(activityThu.trim()))) {
>                       theActivity.setThursdayHours(new 
> Float(Float.parseFloat(activityThu)));
>               }
> 
>               String activityFri = 
> request.getParameter("activity.fridayHours");
>               if (activityFri != null && 
> (!StringUtils.isEmpty(activityFri.trim()))) {
>                       theActivity.setFridayHours(new 
> Float(Float.parseFloat(activityFri)));
>               }
> 
>               String activitySat = 
> request.getParameter("activity.saturdayHours");
>               if (activitySat != null && 
> (!StringUtils.isEmpty(activitySat.trim()))) {
>                       theActivity.setSaturdayHours(new 
> Float(Float.parseFloat(activitySat)));
>               }
> 
>               String activitySun = 
> request.getParameter("activity.sundayHours");
>               if (activitySun != null && 
> (!StringUtils.isEmpty(activitySun.trim()))) {
>                       theActivity.setSundayHours(new 
> Float(Float.parseFloat(activitySun)));
>               }
> 
>               // Saving the activity now makes MySQL generate a new id...
>                 // Not sure if i should do the following lines but these
> are the last i tried...
> 
>               manager.save(theActivity);
> 
>               String theActivityId = theActivity.getId();
>               theActivity.setId(theActivityId);
>               
>               weekActivity.setActivity(theActivity);
>       }
> 
> ------------------------------------------------------------------------------------------------
> 
> As you can see above, i pass some activity properties in the request (all
> of them actually, except the ID!). So i fill the Activity object too,
> persist it so i get the ID (should this be necessary?) and the get the ID
> again and set this Activity into the big WeekActivity object. The bad part
> is when i run this... i get the following:
> 
> Hibernate operation: could not insert: [WeekActivity]; uncategorized
> SQLException for SQL [insert into week_activity (is_authorized, user_id,
> week_id) values (?, ?, ?)]; SQL state [HY000]; error code [1364]; Field
> 'activity' doesn't have a default value; nested exception is
> java.sql.SQLException: Field 'activity' doesn't have a default value
> 
> Obviously it can't have a default value, because the ID should be
> generated each time and before saving the "big" WeekActivity. 
> 
> I have already wasted a week trying to solve this...I'm pretty new to J2EE
> and much more to Hibernate and Spring so please bear with me and my ugly
> code  ;)  but i'm desperate! Ther must be something i am doing
> wrong...maybe not just one thing but more...
> 
> Thanks a lot for reading and lending a hand, you are the best! :) 
> 
> Best regards.
> 
> 
> Michael Horwitz wrote:
>> 
>> O.K. It should all work as long as you have the relationship between
>> WeekActivity and Activity marked as cascade=save. If you are having
>> trouble
>> with the mapping/annotations just post up a sample of what you have so
>> far,
>> and we can help.
>> 
>> Mike.
>> 
>> On 7/14/07, Sielm <[EMAIL PROTECTED]> wrote:
>>>
>>>
>>> Sorry, i forgot about these details. I'm using AppFuse 1.9.4 with Spring
>>> for
>>> the front end too, and Hibernate for persistence. The actual database is
>>> MySQL 5.x (not sure about the exact version).
>>>
>>> Thanks a lot. If i forget anything else please tell me and i will reply
>>> as
>>> soon as possible.
>>>
>>> Best regards.
>>>
>>>
>>> Michael Horwitz wrote:
>>> >
>>> > Which version of AppFuse are you using and with which web front end?
>>> > Details
>>> > as to which persistence layer you have chosen would also be useful:
>>> > Hibernate, JPA or iBatis?
>>> >
>>> > P.S. You English is excellent, by the way!
>>> >
>>> > Thanks
>>> >
>>> > Mike.
>>> >
>>> > On 7/13/07, Sielm <[EMAIL PROTECTED]> wrote:
>>> >>
>>> >>
>>> >> Hi all. I'm new to J2EE and AppFuse and have been tinkering with it
>>> for
>>> a
>>> >> while now. The main thing is this: i have a "big" object called
>>> >> WeekActivity
>>> >> which represents an activity made by an user in a week, and i need to
>>> be
>>> >> able to make a form to create new rows in the database for this
>>> object.
>>> >> This
>>> >> object has 3 properties (attributes), which are User, Week and
>>> Activity.
>>> >> Each of these three are beans which go into the database. This way a
>>> >> WeekActivity row in the database would have the user id, the week id,
>>> the
>>> >> activity id and the hibernate generated primary key ID. Roughly this
>>> is
>>> >> the
>>> >> way this is mapped:
>>> >>
>>> >> · User: table user (ID, ... , other columns)
>>> >> · Week: table week (ID, ..., other columns)
>>> >> · Activity: table activity (ID, ..., other columns)
>>> >> · WeekActivity: table user_week_activity (user.id, week.id,
>>> activity.id
>>> ,
>>> >> ID)
>>> >>     · method getUser ---> hibernate.many-to-one column="user.id"
>>> (because
>>> >> a
>>> >> user could have several activities in a week). I'm assuming this will
>>> map
>>> >> the ID column of the User table to this table as a foreign key (maybe
>>> i
>>> >> got
>>> >> this wrong in hibernate?)
>>> >>     · method getWeek ---> same as above, a many to one for week.id
>>> >> because
>>> >> a
>>> >> week can appear in several activities
>>> >>     · method getActivity ---> hibernate.one-to-one, because an
>>> activity
>>> >> will
>>> >> have a unique ID always, for each time the form is used no matter the
>>> >> user
>>> >> or the week.
>>> >>
>>> >>
>>> >> But User and Week are already in the database, so that in the
>>> >> weekActivityForm.jsp i just pass the user.id and the week.id as
>>> request
>>> >> parameters, but i need to create a new activity.id (and insert the
>>> new
>>> >> activity object into the database) each time the weekActivityForm is
>>> >> filled
>>> >> and submitted, and i don't see the way to do that. At this moment
>>> when
>>> i
>>> >> submit the form hibernate complains about activity.id not having a
>>> >> default
>>> >> value, because i try to save the "big object" without setting the
>>> >> activity.id.
>>> >>
>>> >> In the WeekActivityFormController i have the method onSubmit which
>>> reads
>>> >> the
>>> >> week.id and user.id from the request, uses the manager to fetch the
>>> Week
>>> >> and
>>> >> User objects from the database and sets them into the WeekActivity
>>> >> object.
>>> >> But what can i do to also set the Activity object? The thing is that
>>> i
>>> >> need
>>> >> to insert a new Activity object into the database and then use the
>>> >> WeekActivity.setActivity(activity) method BUT that new activity
>>> object
>>> >> has
>>> >> a
>>> >> new generated ID each time and i don't know how to fetch it from the
>>> >> onSubmit method...if i even can do that.
>>> >>
>>> >> I'm afraid i was a bit confusing explaining my problem...the short
>>> >> version
>>> >> would be: i have a commandobject in a form, and one of its properties
>>> is
>>> >> another object which needs to be created each time i create a new
>>> >> instance
>>> >> of the commandobject (because this property should be always unique)
>>> and
>>> >> when i try to persist the original commandobject i have no way of
>>> setting
>>> >> the property because i can't access the property id (which would be
>>> >> generated when persisted too!)
>>> >>
>>> >> If someone understands my problem, i would be really grateful to hear
>>> >> about
>>> >> it. And if someone doesn't but wants to help and need a more indepth
>>> >> explain
>>> >> i would try my best. Thanks for your time and patience, and anyway a
>>> big
>>> >> salute for everyone in the mailing list. Have a good day :)
>>> >>
>>> >> PS: sorry my English is a bit lacking ;)
>>> >> --
>>> >> View this message in context:
>>> >>
>>> http://www.nabble.com/How-to-insert-a-new-object-from-another-object-%28command%29-form-tf4076716s2369.html#a11586895
>>> >> Sent from the AppFuse - User mailing list archive at Nabble.com.
>>> >>
>>> >> ---------------------------------------------------------------------
>>> >> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>> >> For additional commands, e-mail: [EMAIL PROTECTED]
>>> >>
>>> >>
>>> >
>>> >
>>>
>>> --
>>> View this message in context:
>>> http://www.nabble.com/How-to-insert-a-new-object-from-another-object-%28command%29-form-tf4076716s2369.html#a11593027
>>> Sent from the AppFuse - User mailing list archive at Nabble.com.
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>
>>>
>> 
>> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/How-to-insert-a-new-object-from-another-object-%28command%29-form-tf4076716s2369.html#a11610981
Sent from the AppFuse - User mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to