Hi folks,

I have a little application that goes like this: a property has a number of 
offers on it.  an offer has a person who placed the offer and the person has an 
address.
so:

  | @Entity
  | @Name("property")
  | public class Property implements Serializable
  | {
  |    /**
  |     * Default Constructor.
  |     */
  |     public Property()
  |     {
  |     }
  | 
  |    /**
  |     * Get the property identifier.
  |     */
  |     @Id(generate=GeneratorType.AUTO)
  |     public Integer getId()
  |     {
  |         return id;
  |     }
  | 
  |    /**
  |     * Set the property identifier.
  |     */
  |     public void setId(Integer id)
  |     {
  |         this.id = id;
  |     }
  | 
  |    /**
  |     * Get the list of offers on <code>this</code> property.
  |     */
  |     @OneToMany(cascade = CascadeType.ALL)
  |     public List<Offer> getOffers()
  |     {
  |         return offers;
  |     }
  | 
  |    /**
  |     * Set an offer on this property.
  |     *
  |     * @pre  offer != null
  |     * @post An offer has been placed on this property.
  |     */
  |     public void setOffers(List<Offer> offers)
  |     {
  |         this.offers = offers;
  |     }
  | 
  |    /**
  |     * Add an offer on this property.
  |     *
  |     * @pre  offer != null
  |     * @post An offer has been placed on this property.
  |     */
  |     public void addOffer(Offer offer)
  |     {
  |         this.offers.add(offer);
  |     }
  | 
  |    /**
  |     * The property attributes
  |     */
  |     private int id;
  |     private List<Offer> offers = new ArrayList<Offer>();
  | }
  | 

the offer.

  | @Entity
  | @Name("offer")
  | public class Offer implements Serializable
  | {
  |    /**
  |     * Default Constructor.
  |     */
  |     public Offer()
  |     {
  |         person = new Person();
  |     }
  | 
  |    /**
  |     * Get the offer identifier.
  |     */
  |     @Id(generate=GeneratorType.AUTO)
  |     public Integer getId()
  |     {
  |         return id;
  |     }
  | 
  |    /**
  |     * Set the offer identifier.
  |     */
  |     public void setId(Integer id)
  |     {
  |         this.id = id;
  |     }
  | 
  |    /**
  |     * Get the offer amount.
  |     */
  |     public double getAmount()
  |     {
  |         return amount;
  |     }
  | 
  |    /**
  |     * Set the offer amount.
  |     *
  |     * @pre  amount != null
  |     * @post The offer amount for <code>this</code> has been set.
  |     */
  |     public void setAmount(double amount)
  |     {
  |         this.amount = amount;
  |     }
  | 
  |    /**
  |     * Get the date the offer was placed on.
  |     */
  |     @Basic(temporalType=TemporalType.DATE)
  |     @NotNull
  |     public Date getDate()
  |     {
  |         return date;
  |     }
  | 
  |    /**
  |     * Set the date the offer was placed on.
  |     */
  |     public void setDate(Date date)
  |     {
  |       this.date = date;
  |     }
  | 
  |    /**
  |     * Get the person who placed the offer on the house.
  |     */
  |     @OneToOne(cascade = CascadeType.ALL)
  |     @NotNull(message="Please supply the person who placed this offer.")
  |     public Person getPerson()
  |     {
  |         return person;
  |     }
  | 
  |    /**
  |     * Set the person who made the offer.
  |     *
  |     * @pre  person != null
  |     * @post The person for <code>this</code> has been set.
  |     */
  |     public void setPerson(Person person)
  |     {
  |         this.person = person;
  |     }
  | 
  |    /**
  |     * The offer attributes
  |     */
  |     private int id;
  |     private double amount;
  |     private Date date;
  |     private Person person;
  | }
  | 
  | 
the code to delete an offer:

  | @Scope(EVENT)
  | @Name("editOffer")
  | @LoggedIn
  | public class EditOfferAction
  | {
  |    /**
  |     * Update an offer on a property.
  |     */
  |     @IfInvalid(outcome=REDISPLAY)
  |     public String update()
  |     {
  |         log.info(">>> editing offer");
  |         propertyDatabase.persist(offer);
  |         propertyDatabase.flush();
  |         log.info("<<< edited offer");
  | 
  |         return "updateOfferSuccess";
  |     }
  | 
  |    /**
  |     * Remove the specified offer from the database.
  |     */
  |     @IfInvalid(outcome=REDISPLAY)
  |     public String delete()
  |     {
  |         log.info(">>> deleting offer");
  | 
  |         log.info("session isDirty=" + propertyDatabase.isDirty());
  | 
  |         log.info("**** DELETING OFFER");
  |         propertyDatabase.delete(offer);
  |         log.info("**** FLUSHING SESSION");
  |         propertyDatabase.flush();
  |         log.info("session isDirty=" + propertyDatabase.isDirty());
  |         log.info("<<< deleted offer");
  | 
  |         return "deleteOfferSuccess";
  |     }
  | 
  |    /**
  |     * Is the offer object to update.
  |     */
  |     @In
  |     private Offer offer;
  | 
  |    /**
  |     * Is the property database.
  |     */
  |     @In(create=true)
  |     private Session propertyDatabase;
  | 
  |    /**
  |     * Is the JSF Context.
  |     */
  |     @In
  |     private FacesContext facesContext;
  | 
  |    /**
  |     * Is logger for this class.
  |     */
  |     private static final Logger log =
  |             Logger.getLogger(EditOfferAction.class);
  | 
  | }
  | 


I can't seem to get the delete to work.  I'm getting TransientObjectExceptions 
on the reference to the Person class.  So I then tried to persist the person 
before that and then after the delete hibernate is inserting rows?  I'm a bit 
confused to be honest.  I thought the annotation for CascadeType.ALL would have 
managed this for me?

Hope someone can point me in the right direction.

Thanks,

Marty

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3903757#3903757

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3903757


-------------------------------------------------------
This SF.Net email is sponsored by the JBoss Inc.
Get Certified Today * Register for a JBoss Training Course
Free Certification Exam for All Training Attendees Through End of 2005
Visit http://www.jboss.com/services/certification for more information
_______________________________________________
JBoss-user mailing list
JBoss-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to