Reputation: 33
I am having a problem with Hibernate. The problem is that some of the queries take too long time to execute. I found that one of the Entities "Client" has 3 Relationships @OneToOne to another Entity "Address" - for different type of addresses : "managementAddress", "correspondenceAddress" and "buildingAddress". In the Entity of "Address", there is no Relationship to the "Client" entity. I figured out the the slow loading comes from these Relationships. The @OneToOne relationships are initialized Eagerly. I am not allowed to changed the Model Relationships. Does anyone have idea how could I increase the speed of Execution? Thanks.
This is how the Relationships Are declared in "Client" entity:
@OneToOne(optional=true)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
private Address managementAddress;
This is a sample from the Hibernate statistics, for loading 50 "Client" entities:
7248515 nanoseconds spent acquiring 51 JDBC connections;
2583681 nanoseconds spent releasing 51 JDBC connections;
43894536 nanoseconds spent preparing 203 JDBC statements;
4106621728 nanoseconds spent executing 203 JDBC statements;
0 nanoseconds spent executing 0 JDBC batches;
0 nanoseconds spent performing 0 L2C puts;
0 nanoseconds spent performing 0 L2C hits;
0 nanoseconds spent performing 0 L2C misses;
Upvotes: 1
Views: 2348
Reputation: 21883
Mark it will FetchType.LAZY
to lazy load addresses only when required.
@OneToOne(optional=true, fetch=FetchType.LAZY)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
private Address managementAddress;
Upvotes: 1