Additional queries in JPA

后端 未结 2 426
悲&欢浪女
悲&欢浪女 2021-01-24 05:11

I have two classes InvitedPerson and Flight with a one to one relationship with each other. Here is how they are annotated.

public clas         


        
相关标签:
2条回答
  • 2021-01-24 05:57

    You have not set the association from Flight to InvitedTech lazy. So it loads the InvitedTech associated with the flight.

    Since it can't know from the InvitedTech if there exist a Hotel and a Flight associated with the InvitedTech, it can't decide if these fields should be null or should be proxies. So it's forced to execute additional queries to know if a hotel/flight exists for the InvitedTech.

    0 讨论(0)
  • 2021-01-24 05:59

    I believe this is due to one of Hibernate's idiosyncrasies:

    non-optional one-to-one relationships are eagerly loaded regardless of whether they are mapped as Lazy.

    The reasoning behind this is that as the engine has to look in the association table anyway - to determine whether it should set the association as a proxy or as null - then it may as well load the associated entity anyway.

    I have experienced this myself and as far as I know the only way round it is to mark the relationship with optional=false which tells Hibernate it can always set a proxy.

    If the relationship is optional then the only other option seems to be byte code instrumentation.

    See also:

    https://community.jboss.org/wiki/SomeExplanationsOnLazyLoadingone-to-one

    Making a OneToOne-relation lazy

    0 讨论(0)
提交回复
热议问题