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)
有关更多信息,请参阅此文章