java - OpenSessionInViewFilter cascade merge problems -


i using opensessioninviewfilter, spring, , hibernate data access. opensessioninviewfilter configured this

<filter>         <filter-name>opensessioninviewfilter</filter-name>         <filter-class>org.springframework.orm.hibernate3.support.opensessioninviewfilter</filter-class>         <init-param>             <param-name>sessionfactorybeanname</param-name>             <param-value>sessionfactory</param-value>         </init-param>         <init-param>             <param-name>singlesession</param-name>             <param-value>false</param-value>         </init-param>     </filter> 

now have entity mapped annotations, that

@entity @table(name = "service_user") @cacheable @cache(usage = cacheconcurrencystrategy.nonstrict_read_write) public class serviceuser implements serializable {  @id @generatedvalue(generator = "service_user_id_generator", strategy = generationtype.sequence)     @sequencegenerator(name = "service_user_id_generator", sequencename = "service_user_id_gen", allocationsize = 1)     private long id;  @manytoone     @joincolumn(name = "contract_type_id")     @foreignkey(name = "service_user_ct_fk")     private serviceusercontracttype contracttype;  } 

now i'm trying construct , save new serviceuser entity. have service retrieves serviceusercontracttype database , sets corresponding field in newly created service user. method gets contarct types database marked transactional.

to save service user use

sessionfactory.getcurrentsession().merge(serviceuser) 

if try method retrive contract type

public serviceusercontracttype getcontracttype(long id){         criteria criteria = sessionfactory.getcurrentsession().createcriteria(serviceusercontracttype.class);          criteria.add(restrictions.eq("id", id));          return (serviceusercontracttype) criteria.uniqueresult();     } 

then, moment merge called recieve

object references unsaved transient instance - save transient instance before flushing 

exception. it, add cascade = cascadetype.merge @manytoone annotation in service user mapping , works. but... if use

public serviceusercontracttype getcontracttype(long id){         return (serviceusercontracttype) sessionfactory.getcurrentsession().load(serviceusercontracttype.class, id);     } 

it works without cascade merge option. difference see while debugging first method (with criteria) returns loaded contract type entity, , load variant returns uninitialized proxy.

can explain how things work in scenarios? why proxy can merged without cascade? why criteria returns not proxy initialized entity?


Comments

Popular posts from this blog

get url and add instance to a model with prefilled foreign key :django admin -

android - Keyboard hides my half of edit-text and button below it even in scroll view -

css - Make div keyboard-scrollable in jQuery Mobile? -