Skip to main content

What CascadeType really mean

No replies
teknomics
Offline
Joined: 2010-01-01
Points: 0

I read the documentation on cascadeType, I think I understand what it says, but then when I try something I don't get the desired results. I am using Hibernate 3.3 and JPA.

Here is the scenario:
I have a Many to One relationship between Activity to Account. I set cascadeType.PERSISTon the owning side (Activity) so when I persist Activity, it will also persist Account. But I do not want the merge on Activity to update Account. But it still does that. Why. Any thought is highly appreciated.

/Account.java
@Entity
public class Account implements Serializable {

...
float balance;

void setBalance(float balance) {
this.balance = balance;
}

}

//Activity.java
@Entity
public class Activity implements Serializable {

@ManyToOne (cascade=CascadeType.PERSIST)
Account account;

float amount;
void setAmount(float amount) {
this.amount = amount;
}

}

// Main
public class OneToManyRetrieve {

public static void main(String args[]) {
...
em = emf.createEntityManager();
Activity activity = em.find(Activity.class, new Long(3));

em.getTransaction().begin();
activity.setAmount(111.11f);
activity.getAccount().setBalance(100.88);
em.merge(activity); // Why does it also persist Account when the CascadeType is only for PERSIST and not for MERGE
em.getTransaction().commit();

...
}

}