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]