Hibernate Lazy Load Property XML Mapping
Is it possible to ge开发者_如何学JAVAt Hibernate to lazy load a property on an entity? We have a few clobs in a project I've inherited that are being loaded by default. I am hoping to modify the XML as a stop-gap before we convert the mappings to Annotations.
Yes. See "Using lazy property fetching".
With Hibernate 5, this can be done as follows:.
First, you need to add the following Maven plugin:
<plugin>
<groupId>org.hibernate.orm.tooling</groupId>
<artifactId>hibernate-enhance-maven-plugin</artifactId>
<version>${hibernate.version}</version>
<executions>
<execution>
<configuration>
<enableLazyInitialization>true</enableLazyInitialization>
</configuration>
<goals>
<goal>enhance</goal>
</goals>
</execution>
</executions>
</plugin>
Then, you can simply annotate your entity properties with @Basic(fetch = FetchType.LAZY)
:
@Entity(name = "Event")
@Table(name = "event")
public class Event extends BaseEntity {
@Type(type = "jsonb")
@Column(columnDefinition = "jsonb")
@Basic(fetch = FetchType.LAZY)
private Location location;
public Location getLocation() {
return location;
}
public void setLocation(Location location) {
this.location = location;
}
}
When you fetch the entity:
Event event = entityManager.find(Event.class,
eventHolder.get().getId());
LOGGER.debug("Fetched event");
assertEquals("Cluj-Napoca", event.getLocation().getCity());
Hibernate is going to load the lazy property using a secondary select:
SELECT e.id AS id1_0_0_
FROM event e
WHERE e.id = 1
-- Fetched event
SELECT e.location AS location2_0_
FROM event e
WHERE e.id = 1
精彩评论