2016-10-01 49 views
1

我使用的春天4.1.4.RELEASE + hibernate的4.3.6.Final,我有一個關於與限制一對多集合的大小休眠尋呼的問題,這裏是代碼:休眠分頁與限制OneToMany collecion的大小?

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如果我想要什麼?

有人說唯一的辦法就是先找到產品的列表,然後找到2張給每一個產品,這是唯一的辦法?

回答

0

理想Query.setMaxResults()應該解決的問題,但也有許多方法來它

  1. 您可以使用@Size

    @OneToMany(取= FetchType.LAZY,的mappedBy =「產品「) @Size(min = 1,max = 2) 私人列表圖片;

  2. 也有是@BatchSize

    @OneToMany(取= FetchType.LAZY,的mappedBy = 「產品」) @BatchSize(大小= 2) 私人列表圖片;

  3. 如果仍然不工作比我們可以在這種情況下查詢

+0

去本地查詢與組的幫助下,我怎麼可以指定讓產品中的所有照片? – seaguest

+0

您可以設置大小/批值動態 – Mudassar

+0

請讓我知道,如果它仍然沒有工作 – Mudassar