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);

                UserWeekActivity userWeekActivity = (UserWeekActivity) 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 (userWeekActivity.getUser() == null) {

                                User user = (User) manager.get(User.class, 
userId);
                                userWeekActivity.setUser(user);
                        }
                }

                if (weekId != null) {

                        if (userWeekActivity.getWeek() == null) {

                                Week week = (Week) manager.get(Week.class, 
weekId);
                                userWeekActivity.setWeek(week);
                        }
                }
                
                // Now i try to set the corresponding Activity object too...
                Activity theActivity = userWeekActivity.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);
                
                userWeekActivity.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#a11610772
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