gpt4 book ai didi

java - hibernate 分页限制 OneToMany 集合的大小?

转载 作者:太空宇宙 更新时间:2023-11-04 12:11:36 25 4
gpt4 key购买 nike

我正在使用 spring 4.1.4.RELEASE + hibernate 4.3.6.Final,我有一个关于限制 OneToMany 集合大小的 hibernate 分页的问题,这里是代码:

create table product (
id int(6) unsigned auto_increment primary key,
name varchar(30)
);

create table picture (
id int(6) unsigned auto_increment primary key,
product_id varchar(30),
url varchar(30)
);

@Entity(name = "product")
public class Product extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private int id;

@Column(name = "name")
private String name;

@OneToMany(fetch = FetchType.LAZY, mappedBy = "product")
private List<Picture> pictures;

public List<Picture> getPictures() {
return pictures;
}

public void setPictures(List<Picture> pictures) {
this.pictures = pictures;
}
}


@Entity(name = "picture")
public class Picture extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private int id;

@Column(name = "url")
private String url;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "product_id", referencedColumnName = "id")
private Product product;

public Product getProduct() {
return product;
}

public void setProduct(Product product) {
this.product = product;
}
}

产品和图片之间的关系是OneToMany,现在我想要的是获取产品列表并将每个产品的图片大小限制为2,我该如何实现这一点?

我已经尝试过 BatchSize,但它似乎不起作用,即使这有效,如果我愿意,我是否能够获得所有结果,无论 BatchSize 是什么?

有人说唯一的方法是先找到产品列表,然后找到每个产品的两张图片,这是唯一的方法吗?

最佳答案

理想情况下,Query.setMaxResults() 应该可以解决该问题,但有很多方法可以解决该问题

  1. 您可以使用@Size

    @OneToMany(fetch = FetchType.LAZY,mappedBy =“产品”)@大小(最小值=1,最大值=2)私有(private)列表图片;

  2. 还有@BatchSize

    @OneToMany(fetch = FetchType.LAZY,mappedBy =“产品”)@BatchSize(大小=2)私有(private)列表图片;

  3. 如果仍然不起作用,我们可以借助分组查询进行 native 查询

关于java - hibernate 分页限制 OneToMany 集合的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39808171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com