hibernate - Cascade types in JPA -


given 2 entities department , employee forming one-to-many relationship department employee.

since relationship quite intuitive, leaving out entity classes.

in department :

@onetomany(mappedby = "department", fetch = fetchtype.lazy) private list<employee> employeelist = new arraylist<employee>(0); 

in employee :

@manytoone(fetch = fetchtype.lazy) private department department; 

please notice have mentioned cascade = {cascadetype.merge} though following relationships merged on both sides (owning , inverse sides).

employee employee = entitymanager.find(employee.class, 18l); employee.setemployeename("zz");  department department = employee.getdepartment(); employee.setdepartment(department);  department.setdepartmentname("e"); department.setlocation("e");  entitymanager.merge(employee); 

while merging employee, department merged.

inversely, in following case,

department department = entitymanager.find(department.class, 1l); list<employee> employeelist = department.getemployeelist();  for(employee e:employeelist) {     if(e.getemployeeid().equals(27l)) {         e.setemployeename("xxx");     } }  // no further entitymanager operation(s) here. 

new values set employee instance directly merged associated underlying database.

from openjpa :

cascadetype.merge: when merging entity state, merge entities held in field.

from eclipselink wiki :

merge – if owning entity merged, merge cascaded target of association.

from jpa wiki book :

merge - cascaded entitymanager.merge() operation. if merge() called on parent, child merged. should used dependent relationships. note affects cascading of merge, relationship reference merged. can major issue if use transient variables limit serialization, may need manually merge, or reset transient relationships in case. jpa providers provide additional merge operations.

regarding test cases above, not precisely understand when cascade = {cascadetype.merge} needed or useful. use of cascade = {cascadetype.merge} in case?

how test cases merge department , employee respectively without using cascade = {cascadetype.merge}?

i on eclipselink 2.6.0.

what you're missing fundamental feature of jpa: every change made managed entity automatically saved database. no need call merge() or else. open transaction, entities, , modify them, commit transaction, , that's need modify database.

merge() used copy changes detached entity managed counterpart.


Comments

Popular posts from this blog

javascript - Bootstrap Popover: iOS Safari strange behaviour -

Magento/PHP - Get phones on all members in a customer group -

session - Logging Out Using PHP -