我有对象主位置和主国家/地区
MasterLocation.java
@Entity
@Table(name = "master_location", schema = "public", catalog = "master_db")
@NamedEntityGraphs({
@NamedEntityGraph(name = "MasterLocation.joinsWithMasterCountries",attributeNodes = {
@NamedAttributeNode("masterCountriesByCountryCode")
}),
@NamedEntityGraph(name = "MasterLocation.noJoins",attributeNodes = {})
})
public class MasterLocation {
private String locationCode;
private String locationName;
private String countryCode;
private Integer agencyCode;
private String port;
private String place;
private String userId;
private Timestamp dateCreated;
private Timestamp lastModified;
private String portRefFrom;
private String portRefTo;
private String valid;
private String regionCode;
private String bookingRef;
private MasterCountries masterCountriesByCountryCode;
@ManyToOne(fetch = FetchType.LAZY)
@NotFound(action = NotFoundAction.IGNORE)
@JoinColumn(referencedColumnName = "iso_3166_1_alpha_2_code", name = "country_Code")
public MasterCountries getMasterCountriesByCountryCode() {
return masterCountriesByCountryCode;
}
}
主位置存储库.java
@Repository
public interface MasterLocationRepository extends JpaRepository<MasterLocation, Integer> {
@EntityGraph(value = "MasterLocation.noJoins",type = EntityGraph.EntityGraphType.LOAD)
Page<MasterLocation> findByLocationNameLikeIgnoreCase(String locationName, Pageable pageable);
}
为什么对象MasterCountries仍然加载在findByLocationNameLikeIgnoreCase上?如何在此存储库中禁用获取主国家/地区?
谢谢
我假设您使用Hibernate作为您的JPA提供者。默认情况下,所有单个属性都被急切地加载,甚至一对一或多对一关系也被注释为惰性。
为了能够延迟加载单个属性,您必须使用Hibernate的字节码增强支持。在这篇Vlad Mihalcea的帖子中,您将找到如何使用Maven激活它。您只需要将以下插件添加到pom.xml文件中:
<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>
此外,请尝试将@EntityGraph注释类型参数更改为FETCH,而不是LOAD,或者使用FetchType.LAZY.注释master CountriesByCountryCode使用当前配置(EntityGraphType.LOAD),未包含在EntityGraph定义中的属性将保持其默认的FETCH/LOAD配置。查看此处了解更多详细信息
在另一篇文章中,Vlad再次谈到了字节码增强,并提供了另一个选项:子实体。我自己还没有尝试过子实体选项,所以我不能告诉你它有多好。
最后,另一种选择,需要更多的工作,但我认为是最好的选择,是使用投影DTO来仅选择每个案例所需的数据。
问题内容: 我有,与有着多对多的关系。 因此表布局为: 为了得到实体A的对象:我叫其不 使用spring和hibernate。 问题是,有时后续代码仅需要A,有时后续代码将继续访问关联的B,因此我们希望在某些情况下使用 延迟加载, 在某些情况下则 渴望 使用。但是问题是所有数据库访问都是通过同一单一数据库提供的,因此只有一种方法。 我应该创建方法getById()的两个版本吗? 但是对于更复杂的情
我有一个问题,就是基于hasMany关系从数据库中获取数据并将其发送到Larave中的api。在下面的代码中,Laravel没有给我客户id=$id的产品。我不知道为什么,我不能在$query旁边发送$id。如果我把号码写在“我有很好的安全套,但我需要自动拿。 所有api代码 先谢谢你。
问题内容: 如果按以下方式实现单例, 此实现与延迟初始化方法有何不同?在这种情况下,实例将在加载类时创建,并且仅在第一次使用时才加载类本身(例如,Singleton.getInstance(),而当您声明实例Singleton singleton = null;时则不会)。 即使采用惰性初始化方法,该实例也是在对getInstance()的调用上创建的 我在这里想念什么吗? 问题答案: 您也可以调
我已经阅读了本教程和这篇文章,但我不明白每种加载类型的确切用途。 我解释 我有这个POCO: 我明白这一点: > 对于懒惰加载:因为加载是懒惰的,如果我调用dbset将不会加载所有导航属性。这种类型的加载在性能和响应性方面是最好的。默认情况下启用它,如果我想重新启用它,我必须设置: 对于即时加载,它不是懒惰的:当我加载dpc\u-gestion时,它加载了所有导航属性。可以使用方法加载导航属性。要
我正在使用教义2来绘制学术时间表。以下是对这些关系的简化观察: 一个类有事件(一对多) 事件具有类型(多对一) 一个事件有一个位置(多对一) 使用
使用JPA EntityManager和JPA查询对象,我如何覆盖在查询中惰性获取注释@OneToMany(fetch=FetchType.EAGER)的内容? 如果我有hibernate查询对象,我可以让它创建一个criteria对象,并使用它将fetch类型设置为lazy。但我必须使用JPA查询对象。这个问题有什么解决办法吗?