java - hibernate lazy init not lazy at all! -
i have entity has collection 1 of attributes. collection mapped @manytomany annotation fetch type lazy. target entity has collections attributes, @onetomany , @manytomany. when fetching first entity (via entitymanager.find(id)) collection attribute populated , furthermore elements of collection populated (i.e. collections filled) many canonicalized objects. understand describing attribute lazy fetched should prevent collection being filled. wrong or doing wrong?
thank you.
the entities (only 2 here example):
@entity @table(name="buys") @xstreamalias("buy") public class buy implements serializable { /** * */ private static final long serialversionuid = 1l; public enum automode {auto, manual}; public enum bool {false,true}; public enum frequency {freq1, freq2}; public enum status {status1, status2}; @id @generatedvalue(strategy = generationtype.auto) @xstreamasattribute @column(name = "id") private long id; /* @joincolumn(name="agency_id") @xstreamalias("agencyid") @manytoone(fetch = fetchtype.lazy, cascade = {cascadetype.persist, cascadetype.merge}) private agency agencyid; */ @column(name = "agency_id") @xstreamalias("agencyid") private long agencyid; @column(name = "auction_date") @temporal(temporaltype.date) @xstreamalias("auction") private date auctiondate; @column(name = "pre_auction_date") @temporal(temporaltype.date) @xstreamalias("pre-auction") private date preauctiondate; @column(name = "send_feedback_auto_mode") @xstreamalias("auto-send") @enumerated(enumtype.ordinal) private automode sendfeedbackautomode; @column(name = "campaign_budget") @xstreamalias("budget") private integer budget; @column(name = "price_ceiling") @xstreamalias("price-ceiling") @min(value = 1, message = "price ceiling should greater 0") private double priceceiling; /* @manytoone( cascade = {cascadetype.persist, cascadetype.merge}) @joincolumn(name="campaign_id") private campaign campaign; */ @column(name = "campaign_id") @xstreamalias("campaignid") private long campaign; @column(name = "avg_bid_received") @xstreamalias("avgbigreceived") private double avgbid; @column(name = "maximum_unique_users") @xstreamalias("maxuniqueusers") private int maxuniqueusers; @column(name = "optimize_method") @xstreamalias("optimzemethod") private int optimzemethod; @column(name = "frequency") @xstreamalias("frequency") private int frequency; @column(name = "frequency_type") @xstreamalias("frequency_type") @enumerated(enumtype.ordinal) private frequency frequencytype; @column(name = "additional_info") @xstreamalias("additionalinfo") private string additionalinfo; @column(name = "support_oob") @xstreamalias("oob") @enumerated(enumtype.ordinal) private bool supportoob; @column(name = "support_in_banner") @xstreamalias("ib") @enumerated(enumtype.ordinal) private bool supportib; @column(name = "status") @xstreamalias("status") @enumerated(enumtype.ordinal) private status status; @version @column(name = "version") @xstreamasattribute private integer version; @manytomany(fetch=fetchtype.lazy,cascade = { cascadetype.merge, cascadetype.persist}) @jointable( name="buy_ad_sizes", joincolumns=@joincolumn(name="buy_id"),inversejoincolumns=@joincolumn(name="ad_size_id")) @xstreamalias("adsizes") private list<adunit> adsizes; @manytomany(fetch=fetchtype.lazy,cascade = { cascadetype.merge, cascadetype.persist}) @jointable( name="buy_profiles", joincolumns=@joincolumn(name="buy_id"),inversejoincolumns=@joincolumn(name="profile_id")) @xstreamalias("profiles") private list<profile> profiles; @joincolumn(name="buy_id") @onetomany(fetch=fetchtype.lazy,cascade = { cascadetype.merge, cascadetype.persist}) @xstreamalias("mediaplans") private list<mediaplan> mediaplans; @joincolumn(name = "buy_id") @onetomany(fetch=fetchtype.lazy,cascade = { cascadetype.merge, cascadetype.persist}) @xstreamalias("publisherproposals") private list<publisherproposal> publisherproposals; public long getid() { return id; } public void setid(long id) { this.id = id; } public integer getversion() { return version; } public void setversion(integer version) { this.version = version; } public date getauctiondate() { return auctiondate; } public void setauctiondate(date auctiondate) { this.auctiondate = auctiondate; } public date getpreauctiondate() { return preauctiondate; } public void setpreauctiondate(date preauctiondate) { this.preauctiondate = preauctiondate; } public integer getbudget() { return budget; } public void setbudget(integer budget) { this.budget = budget; } public double getpriceceiling() { return priceceiling; } public void setpriceceiling(double priceceiling) { this.priceceiling = priceceiling; } public automode getsendfeedbackautomode() { return sendfeedbackautomode; } public void setsendfeedbackautomode(automode sendfeedbackautomode) { this.sendfeedbackautomode = sendfeedbackautomode; } public double getavgbid() { return avgbid; } public void setavgbid(double avgbid) { this.avgbid = avgbid; } public int getmaxuniqueusers() { return maxuniqueusers; } public void setmaxuniqueusers(int maxuniqueusers) { this.maxuniqueusers = maxuniqueusers; } public int getoptimzemethod() { return optimzemethod; } public void setoptimzemethod(int optimzemethod) { this.optimzemethod = optimzemethod; } public int getfrequency() { return frequency; } public void setfrequency(int frequency) { this.frequency = frequency; } public frequency getfrequencytype() { return frequencytype; } public void setfrequencytype(frequency frequencytype) { this.frequencytype = frequencytype; } public string getadditionalinfo() { return additionalinfo; } public void setadditionalinfo(string additionalinfo) { this.additionalinfo = additionalinfo; } public bool getsupportoob() { return supportoob; } public list<adunit> getadsizes() { return adsizes; } public void setadsizes(list<adunit> adsizes) { this.adsizes = adsizes; } public void setsupportoob(bool supportoob) { this.supportoob = supportoob; } public bool getsupportib() { return supportib; } public void setsupportib(bool supportib) { this.supportib = supportib; } public status getstatus() { return status; } public void setstatus(status status) { this.status = status; } public list<profile> getprofiles() { return profiles; } public void setprofiles(list<profile> profiles) { this.profiles = profiles; } public list<mediaplan> getmediaplans() { return mediaplans; } public void setmediaplans(list<mediaplan> mediaplans) { this.mediaplans = mediaplans; } public list<publisherproposal> getpublisherproposals() { return publisherproposals; } public void setpublisherproposals(list<publisherproposal> publisherproposals) { this.publisherproposals = publisherproposals; } public long getagencyid() { return agencyid; } public void setagencyid(long agencyid) { this.agencyid = agencyid; } public long getcampaign() { return campaign; } public void setcampaign(long campaign) { this.campaign = campaign; } }
second entity:
@entity @table(name = "ad_units") @xstreamalias("adunit") public class adunit { @id @generatedvalue(strategy = generationtype.auto) @column(name = "id") @xstreamasattribute private long id; @column(unique=true, nullable=false ) @xstreamasattribute private string name; @column(name="full_name",nullable=false ) @xstreamalias("full-name") private string fullname; @xstreamalias("width") private integer width; @xstreamalias("height") private integer height; @xstreamalias("type") private string type; @manytomany(fetch = fetchtype.lazy, cascade = {cascadetype.persist, cascadetype.merge}, mappedby = "adsizes", targetentity = publisher.class) private list<publisher> publishers; public long getid() { return id; } public void setid(long id) { this.id = id; } public string getname() { return name; } public void setname(string name) { this.name = name; } public string getfullname() { return fullname; } public void setfullname(string fullname) { this.fullname = fullname; } public integer getwidth() { return width; } public void setwidth(integer width) { this.width = width; } public integer getheight() { return height; } public void setheight(integer height) { this.height = height; } public string gettype() { return type; } public void settype(string type) { this.type = type; } public list<publisher> getpublishers() { return publishers; } public void setpublishers(list<publisher> publishers) { this.publishers = publishers; } }
the returned object:
<buy id="1" version="0"> <agencyid>1</agencyid> <auction class="sql-date">2010-09-25</auction> <pre-auction class="sql-date">2010-09-25</pre-auction> <auto-send>auto</auto-send> <budget>1000</budget> <price-ceiling>5.0</price-ceiling> <campaignid>0</campaignid> <avgbigreceived>5.5</avgbigreceived> <maxuniqueusers>7</maxuniqueusers> <optimzemethod>3</optimzemethod> <frequency>0</frequency> <frequency__type>freq1</frequency__type> <additionalinfo>none</additionalinfo> <oob>true</oob> <ib>false</ib> <status>status1</status> <adsizes> <adunit id="1" name="300x250"> <full-name>300 x 250 imu - (medium rectangle)</full-name> <width>300</width> <height>250</height> <type>popups & rectangles</type> <publishers> <publisher id="2"> <name>publisher2</name> <profiles/> <proposals> <proposal id="0" version="0"> <publisherid>2</publisherid> <buyid>1</buyid> <creationdate class="sql-date">2010-11-11</creationdate> <lastupdated class="sql-date">2010-11-11</lastupdated> <cpm>5.0</cpm> <minimumspend>100</minimumspend> <info>none</info> <revealusers>false</revealusers> <status>status1</status> <mediaplanproposals/> </proposal> </proposals> <adsizes> <adunit reference="../../../.."/> <adunit id="3" name="240x400"> <full-name>240 x 400 imu - (vertical rectangle)</full-name> <width>240</width> <height>240</height> <type>popups & rectangles</type> <publishers> <publisher reference="../../../.."/> </publishers> </adunit> </adsizes> </publisher> </publishers> </adunit> </adsizes> <profiles/> <mediaplans/> <publisherproposals> <proposal reference="../../adsizes/adunit/publishers/publisher/proposals/proposal"/> </publisherproposals> </buy>
as can see object contains collection defined lazy fetched , furthermore collections inside collections fetched.
the debug output queries:
[http-8080-1] debug org.hibernate.sql - select buy0_.id id0_0_, buy0_.additional_info additional2_0_0_, buy0_.agency_id agency3_0_0_, buy0_.auction_date auction4_0_0_, buy0_.avg_bid_received avg5_0_0_, buy0_.campaign_budget campaign6_0_0_, buy0_.campaign_id campaign7_0_0_, buy0_.frequency frequency0_0_, buy0_.frequency_type frequency9_0_0_, buy0_.maximum_unique_users maximum10_0_0_, buy0_.optimize_method optimize11_0_0_, buy0_.pre_auction_date pre12_0_0_, buy0_.price_ceiling price13_0_0_, buy0_.send_feedback_auto_mode send14_0_0_, buy0_.status status0_0_, buy0_.support_in_banner support16_0_0_, buy0_.support_oob support17_0_0_, buy0_.version version0_0_ buys buy0_ buy0_.id=? hibernate: select buy0_.id id0_0_, buy0_.additional_info additional2_0_0_, buy0_.agency_id agency3_0_0_, buy0_.auction_date auction4_0_0_, buy0_.avg_bid_received avg5_0_0_, buy0_.campaign_budget campaign6_0_0_, buy0_.campaign_id campaign7_0_0_, buy0_.frequency frequency0_0_, buy0_.frequency_type frequency9_0_0_, buy0_.maximum_unique_users maximum10_0_0_, buy0_.optimize_method optimize11_0_0_, buy0_.pre_auction_date pre12_0_0_, buy0_.price_ceiling price13_0_0_, buy0_.send_feedback_auto_mode send14_0_0_, buy0_.status status0_0_, buy0_.support_in_banner support16_0_0_, buy0_.support_oob support17_0_0_, buy0_.version version0_0_ buys buy0_ buy0_.id=? [http-8080-1] debug org.hibernate.pretty.printer - com.legolas.model.buy{budget=1000, supportib=0, avgbid=5.5, status=0, priceceiling=5.0, maxuniqueusers=7, optimzemethod=3, frequency=0, additionalinfo=none, agencyid=1, frequencytype=0, version=0, sendfeedbackautomode=0, id=1, mediaplans=<uninitialized>, adsizes=<uninitialized>, profiles=<uninitialized>, campaign=0, supportoob=1, publisherproposals=<uninitialized>, preauctiondate=25 september 2010, auctiondate=25 september 2010} [http-8080-1] debug org.hibernate.sql - select adsizes0_.buy_id buy1_1_, adsizes0_.ad_size_id ad2_1_, adunit1_.id id1_0_, adunit1_.full_name full2_1_0_, adunit1_.height height1_0_, adunit1_.name name1_0_, adunit1_.type type1_0_, adunit1_.width width1_0_ buy_ad_sizes adsizes0_ left outer join ad_units adunit1_ on adsizes0_.ad_size_id=adunit1_.id adsizes0_.buy_id=? hibernate: select adsizes0_.buy_id buy1_1_, adsizes0_.ad_size_id ad2_1_, adunit1_.id id1_0_, adunit1_.full_name full2_1_0_, adunit1_.height height1_0_, adunit1_.name name1_0_, adunit1_.type type1_0_, adunit1_.width width1_0_ buy_ad_sizes adsizes0_ left outer join ad_units adunit1_ on adsizes0_.ad_size_id=adunit1_.id adsizes0_.buy_id=? [http-8080-1] debug org.hibernate.sql - select publishers0_.adsize_id adsize2_1_, publishers0_.publisher_id publisher1_1_, publisher1_.publisher_id id5_0_, publisher1_1_.name name5_0_, publisher1_.name name14_0_ publishers_adsizes publishers0_ left outer join publishers publisher1_ on publishers0_.publisher_id=publisher1_.publisher_id left outer join accounts publisher1_1_ on publisher1_.publisher_id=publisher1_1_.id publishers0_.adsize_id=? hibernate: select publishers0_.adsize_id adsize2_1_, publishers0_.publisher_id publisher1_1_, publisher1_.publisher_id id5_0_, publisher1_1_.name name5_0_, publisher1_.name name14_0_ publishers_adsizes publishers0_ left outer join publishers publisher1_ on publishers0_.publisher_id=publisher1_.publisher_id left outer join accounts publisher1_1_ on publisher1_.publisher_id=publisher1_1_.id publishers0_.adsize_id=? [http-8080-1] debug org.hibernate.sql - select profiles0_.publisher_id publisher3_1_, profiles0_.id id1_, profiles0_.id id9_0_, profiles0_.profile_id profile2_9_0_, profiles0_.publisher_id publisher3_9_0_, profiles0_.reach reach9_0_, profiles0_.stamped stamped9_0_, profiles0_.targeting_name targeting6_9_0_, profiles0_.users_on_site users7_9_0_ publisher_profiles profiles0_ profiles0_.publisher_id=? hibernate: select profiles0_.publisher_id publisher3_1_, profiles0_.id id1_, profiles0_.id id9_0_, profiles0_.profile_id profile2_9_0_, profiles0_.publisher_id publisher3_9_0_, profiles0_.reach reach9_0_, profiles0_.stamped stamped9_0_, profiles0_.targeting_name targeting6_9_0_, profiles0_.users_on_site users7_9_0_ publisher_profiles profiles0_ profiles0_.publisher_id=? [http-8080-1] debug org.hibernate.sql - select proposals0_.publisher_id publisher9_1_, proposals0_.id id1_, proposals0_.id id4_0_, proposals0_.additional_info additional2_4_0_, proposals0_.buy_id buy3_4_0_, proposals0_.cpm cpm4_0_, proposals0_.creation_date creation5_4_0_, proposals0_.last_updated last6_4_0_, proposals0_.minimum_spend minimum7_4_0_, proposals0_.proposal_status proposal8_4_0_, proposals0_.publisher_id publisher9_4_0_, proposals0_.reveal_num_of_users reveal10_4_0_, proposals0_.version version4_0_ publishers_proposals proposals0_ proposals0_.publisher_id=? hibernate: select proposals0_.publisher_id publisher9_1_, proposals0_.id id1_, proposals0_.id id4_0_, proposals0_.additional_info additional2_4_0_, proposals0_.buy_id buy3_4_0_, proposals0_.cpm cpm4_0_, proposals0_.creation_date creation5_4_0_, proposals0_.last_updated last6_4_0_, proposals0_.minimum_spend minimum7_4_0_, proposals0_.proposal_status proposal8_4_0_, proposals0_.publisher_id publisher9_4_0_, proposals0_.reveal_num_of_users reveal10_4_0_, proposals0_.version version4_0_ publishers_proposals proposals0_ proposals0_.publisher_id=? [http-8080-1] debug org.hibernate.sql - select mpproposal0_.proposal_id proposal9_1_, mpproposal0_.id id1_, mpproposal0_.id id2_0_, mpproposal0_.budget budget2_0_, mpproposal0_.comments comments2_0_, mpproposal0_.cpm cpm2_0_, mpproposal0_.exclusive_reach exclusive5_2_0_, mpproposal0_.frequency_cap frequency6_2_0_, mpproposal0_.impressions impressi7_2_0_, mpproposal0_.mediaplan_id mediaplan8_2_0_, mpproposal0_.proposal_id proposal9_2_0_, mpproposal0_.reach reach2_0_ mediaplan_proposals mpproposal0_ mpproposal0_.proposal_id=? hibernate: select mpproposal0_.proposal_id proposal9_1_, mpproposal0_.id id1_, mpproposal0_.id id2_0_, mpproposal0_.budget budget2_0_, mpproposal0_.comments comments2_0_, mpproposal0_.cpm cpm2_0_, mpproposal0_.exclusive_reach exclusive5_2_0_, mpproposal0_.frequency_cap frequency6_2_0_, mpproposal0_.impressions impressi7_2_0_, mpproposal0_.mediaplan_id mediaplan8_2_0_, mpproposal0_.proposal_id proposal9_2_0_, mpproposal0_.reach reach2_0_ mediaplan_proposals mpproposal0_ mpproposal0_.proposal_id=? [http-8080-1] debug org.hibernate.sql - select adsizes0_.publisher_id publisher1_1_, adsizes0_.adsize_id adsize2_1_, adunit1_.id id1_0_, adunit1_.full_name full2_1_0_, adunit1_.height height1_0_, adunit1_.name name1_0_, adunit1_.type type1_0_, adunit1_.width width1_0_ publishers_adsizes adsizes0_ left outer join ad_units adunit1_ on adsizes0_.adsize_id=adunit1_.id adsizes0_.publisher_id=? hibernate: select adsizes0_.publisher_id publisher1_1_, adsizes0_.adsize_id adsize2_1_, adunit1_.id id1_0_, adunit1_.full_name full2_1_0_, adunit1_.height height1_0_, adunit1_.name name1_0_, adunit1_.type type1_0_, adunit1_.width width1_0_ publishers_adsizes adsizes0_ left outer join ad_units adunit1_ on adsizes0_.adsize_id=adunit1_.id adsizes0_.publisher_id=? [http-8080-1] debug org.hibernate.sql - select publishers0_.adsize_id adsize2_1_, publishers0_.publisher_id publisher1_1_, publisher1_.publisher_id id5_0_, publisher1_1_.name name5_0_, publisher1_.name name14_0_ publishers_adsizes publishers0_ left outer join publishers publisher1_ on publishers0_.publisher_id=publisher1_.publisher_id left outer join accounts publisher1_1_ on publisher1_.publisher_id=publisher1_1_.id publishers0_.adsize_id=? hibernate: select publishers0_.adsize_id adsize2_1_, publishers0_.publisher_id publisher1_1_, publisher1_.publisher_id id5_0_, publisher1_1_.name name5_0_, publisher1_.name name14_0_ publishers_adsizes publishers0_ left outer join publishers publisher1_ on publishers0_.publisher_id=publisher1_.publisher_id left outer join accounts publisher1_1_ on publisher1_.publisher_id=publisher1_1_.id publishers0_.adsize_id=? [http-8080-1] debug org.hibernate.sql - select profiles0_.buy_id buy1_1_, profiles0_.profile_id profile2_1_, profile1_.id id12_0_, profile1_.agency_id agency2_12_0_, profile1_.name name12_0_ buy_profiles profiles0_ left outer join profiles profile1_ on profiles0_.profile_id=profile1_.id profiles0_.buy_id=? hibernate: select profiles0_.buy_id buy1_1_, profiles0_.profile_id profile2_1_, profile1_.id id12_0_, profile1_.agency_id agency2_12_0_, profile1_.name name12_0_ buy_profiles profiles0_ left outer join profiles profile1_ on profiles0_.profile_id=profile1_.id profiles0_.buy_id=? [http-8080-1] debug org.hibernate.sql - select mediaplans0_.buy_id buy2_1_, mediaplans0_.id id1_, mediaplans0_.id id11_0_, mediaplans0_.buy_id buy2_11_0_, mediaplans0_.is_final is3_11_0_ mediaplans mediaplans0_ mediaplans0_.buy_id=? hibernate: select mediaplans0_.buy_id buy2_1_, mediaplans0_.id id1_, mediaplans0_.id id11_0_, mediaplans0_.buy_id buy2_11_0_, mediaplans0_.is_final is3_11_0_ mediaplans mediaplans0_ mediaplans0_.buy_id=? [http-8080-1] debug org.hibernate.sql - select publisherp0_.buy_id buy3_1_, publisherp0_.id id1_, publisherp0_.id id4_0_, publisherp0_.additional_info additional2_4_0_, publisherp0_.buy_id buy3_4_0_, publisherp0_.cpm cpm4_0_, publisherp0_.creation_date creation5_4_0_, publisherp0_.last_updated last6_4_0_, publisherp0_.minimum_spend minimum7_4_0_, publisherp0_.proposal_status proposal8_4_0_, publisherp0_.publisher_id publisher9_4_0_, publisherp0_.reveal_num_of_users reveal10_4_0_, publisherp0_.version version4_0_ publishers_proposals publisherp0_ publisherp0_.buy_id=? hibernate: select publisherp0_.buy_id buy3_1_, publisherp0_.id id1_, publisherp0_.id id4_0_, publisherp0_.additional_info additional2_4_0_, publisherp0_.buy_id buy3_4_0_, publisherp0_.cpm cpm4_0_, publisherp0_.creation_date creation5_4_0_, publisherp0_.last_updated last6_4_0_, publisherp0_.minimum_spend minimum7_4_0_, publisherp0_.proposal_status proposal8_4_0_, publisherp0_.publisher_id publisher9_4_0_, publisherp0_.reveal_num_of_users reveal10_4_0_, publisherp0_.version version4_0_ publishers_proposals publisherp0_ publisherp0_.buy_id=?
posting comment answer: i wonder if not side effect of xml serialization. can confirm occurs when no xml serialization involved?
Comments
Post a Comment