NKi*_*253 4 java sql hibernate jpa
我有4张桌子 - store, catalog_galleries, catalog_images, and catalog_financials.
store --> catalog_galleries --> catalog_images换句话说,当我遍历关系时:store.getCatalogGallery().getCatalogImages()我得到重复的记录.有谁知道这可能是什么原因?关于在哪里看的任何建议?
该store表具有一种OneToOne关系,catalog_galleries该关系又具有OneToMany与之关系catalog_images和渴望获取类型.该store表也OneToMany与之有关系catalog_financials.
以下是相关实体:
商店实体
@Entity
@Table(name="store")
public class Store {
...
private CatalogGallery gallery;
...
@OneToOne(mappedBy="store")
public CatalogGallery getGallery() {
return gallery;
}
}
Run Code Online (Sandbox Code Playgroud)
CatalogGallery实体
@Entity
@Table(name="catalog_galleries")
public class CatalogGallery {
...
private Store store;
private Collection<CatalogImage> catalogImages;
...
@OneToOne
@PrimaryKeyJoinColumn
public Store getStore() {
return store;
}
@OneToMany(mappedBy="catalogGallery", fetch=FetchType.EAGER)
public Collection<CatalogImage> getCatalogImages {
return catalogImages;
}
}
Run Code Online (Sandbox Code Playgroud)
CatalogImage实体
@Entity
@Table(name="catalog_images")
public class CatalogImage {
...
private CatalogGallery catalogGallery;
...
@ManyToOne
@JoinColumn(name="gallery_id", insertable=false, updatable=false)
public CatalogGallery getCatalogGallery() {
return catalogGallery;
}
}
Run Code Online (Sandbox Code Playgroud)
这是因为你的fetch = FetchType.EAGER.
Hibernate创建JOIN并尝试通过一个查询获取所有集合.
如果您确实需要FetchType.EAGER并且不想使用Set替换您的集合,则可以@Fetch (FetchMode.SELECT)对集合使用注释:
@OneToMany(mappedBy="catalogGallery", fetch=FetchType.EAGER)
@Fetch (FetchMode.SELECT)
public Collection<CatalogImage> getCatalogImages {
return catalogImages;
}
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅此文章