1.1 рд╕рдорд╕реНрдпреЗрдЪреА рдкрд╛рд░реНрд╢реНрд╡рднреВрдореА
рдЬреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣реА рдЦрд░реНтАНрдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕рд╕рд╣ рдХрд╛рдо рд╕реБрд░реВ рдХрд░рддрд╛ рддреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣рд╛рд▓рд╛ "рдЕрдХрд╛рд▓реА рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди рд╣реЗ рд╕рд░реНрд╡ рд╡рд╛рдИрдЯрд╛рдЪреЗ рдореВрд│ рдЖрд╣реЗ" рд╣реЗ рд╡рд╛рдХреНрдп рд▓рдЧреЗрдЪ рд▓рдХреНрд╖рд╛рдд рдпреЗрдИрд▓. рдлрдХреНрдд рдЖрддрд╛ рддреВ рддрд┐рд▓рд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрджреНрдзрддреАрдиреЗ рдЖрдард╡рддреЗрд╕. рдбреЗрдЯрд╛рдмреЗрд╕рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдирд╛, рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рдЖрд╣реЗ. рдЖрдгрд┐ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдбрд┐рдЭрд╛рдИрди рд╕реНрдЯреЗрдЬрд╡рд░ рдЖрдзреАрдкрд╛рд╕реВрдирдЪ рддреНрдпрд╛рдЪреНрдпрд╛рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.
рд╣рд╛рдпрдмрд░рдиреЗрдЯ рдбреЗрдЯрд╛рдмреЗрд╕рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреЗ рдЦреВрдк рд╕реЛрдпреАрд╕реНрдХрд░ рдмрдирд╡рддреЗ. рдлрдХреНрдд рдпреЛрдЧреНрдп рд░реАрддреАрдиреЗ рднрд╛рд╖реНрдп рдХрд░реВрди рддреБрдореНрд╣реА рдХреЛрдгрддреНрдпрд╛рд╣реА рд▓рд╣рд╛рди рд╡рд╕реНрддреВ рд╕рд╣рдЬ рдорд┐рд│рд╡реВ рд╢рдХрддрд╛ @OneToMany
рдЖрдгрд┐ @ManyToMany
. рдЙрджрд╛рд╣рд░рдг:
@Entity
@Table(name="user")
class User {
@Column(name="id")
public Integer id;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "user_id")
public List<Comment> comments;
}
рдЖрдгрд┐ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рдорд┐рд│рд╡рдгреЗ рдХрд┐рддреА рд╕реЛрдкреЗ рдЖрд╣реЗ:
User user = session.get(User.class, 1);
List<Comment> comments = user.getComments();
рдЖрдгрд┐ рддреБрдореНрд╣реА рдореЛрдареНрдпрд╛ рд╕рд░рдкреНрд░рд╛рдИрдЬрд╕рд╛рдареА рд╕рд╣рднрд╛рдЧреА рд╡реНрд╣рд╛рд▓. рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рдЕрдиреЗрдХ рд╣рдЬрд╛рд░ рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рдЖрд╣реЗрдд. рддреБрдореНрд╣реА рдЕрд╕рд╛ рдХреЛрдб рд▓рд┐рд╣рд┐рд▓реНрдпрд╛рд╕, рд╣рд╛рдпрдмрд░рдиреЗрдЯ рдЕрд░реНрдерд╛рддрдЪ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рд╕рд░реНрд╡ рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рд▓реЛрдб рдХрд░реЗрд▓. рдкрдг рддреЗ рдЦреВрдк рд╣рд│реВ рдЕрд╕реЗрд▓, рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рдЦреВрдк рдореЗрдорд░реА рдШреЗрддреАрд▓ рдЗрддреНрдпрд╛рджреА.
рдореНрд╣рдгреВрдирдЪ рддреБрдореНрд╣рд╛рд▓рд╛ рдЕрд╕рдВ рд▓рд┐рд╣рд┐рддрд╛ рдпреЗрдд рдирд╛рд╣реА! рд╕рд┐рджреНрдзрд╛рдВрддрддрдГ, рд╣реЛрдп, рдкрд░рдВрддреБ рд╕рд░рд╛рд╡ рдордзреНрдпреЗ, рдирд╛рд╣реА.
1.2 рд╕рдВрдХрд▓рдирд╛рд╕рд╣ рдЧреЛрд╖реНрдЯреА рдЦрд░рд╛рдм рдХрд░рдгреЗ
рд╕рдорд╕реНрдпрд╛ рдЖрдгрдЦреА рдордиреЛрд░рдВрдЬрдХ рдЖрд╣реЗ. рд╕рд░реНрд╡ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рд╕рд╣рд╕рд╛ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╕рд░реНрд╡ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдЪреНрдпрд╛ рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╕рддреЗ. рдЬрд░реА рдЖрдкрдг рддреЗ рдХреНрд▓рд╛рдпрдВрдЯрд╡рд░ рдХреБрдареЗрддрд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреЗрд▓реЗ рддрд░реАрд╣реА, рдЖрдкрдг рддреЗ рднрд╛рдЧ - рдкреГрд╖реНрдард╛рдВрдордзреНрдпреЗ рдХрд░рдгреНрдпрд╛рд╕ рдкреНрд░рд╛рдзрд╛рдиреНрдп рджреЗрддрд╛.
рдореНрд╣рдгреВрди рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдпрд╛рд╕рд╛рд░рдЦреНрдпрд╛ рдкрджреНрдзрддреАрдВрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ:
public class CommentsManager {
private static final PAGE_SIZE = 50;
public List<Comment> getCommentsPage(int userId, int pageIndex){
User user = session.get(User.class, userId);
List<Comment> comments = user.getComments();
return comments.subList(pageIndex * PAGE_SIZE, PAGE_SIZE);
}
public int getCommentsPageCount(int userId) {
User user = session.get(User.class, userId);
List<Comment> comments = user.getComments();
return Math.ceil( comments.size()/PAGE_SIZE);
}
}
рдкрд╣рд┐рд▓реА рдкрджреНрдзрдд рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдЪреЗ рдлрдХреНрдд рдПрдХ рдкреГрд╖реНрда рджреЗрддреЗ - 50 рддреБрдХрдбреЗ. рджреБрд╕рд░реА рдкрджреНрдзрдд рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдЪреНрдпрд╛ рдкреГрд╖реНрдард╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдкрд░рдд рдХрд░рддреЗ. рдЖрдгрд┐ рд╣реЗ рд╕рд░реНрд╡рд╛рдд рд╡рд╛рдИрдЯ рдЖрд╣реЗ. рдлрдХреНрдд рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рдбреЗрдЯрд╛рдмреЗрд╕рдордзреВрди рд╕рд░реНрд╡ рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рд╛рд╡реНрдпрд╛ рд▓рд╛рдЧрд▓реНрдпрд╛!
1.3 рдмреЛрдЧрджреНрдпрд╛рдЪреНрдпрд╛ рд╢реЗрд╡рдЯреА рдкреНрд░рдХрд╛рд╢
рдореНрд╣рдгреВрди, рдХреЛрдгреАрд╣реА рдЖрдордЪреЗ рдЖрд╢реНрдЪрд░реНрдпрдХрд╛рд░рдХ рдмрд╛рд▓ рд╕рдВрдЧреНрд░рд╣ рд╡рд╛рдкрд░рдд рдирд╛рд╣реА. рдирд╛рд╣реА, рдЕрд░реНрдерд╛рддрдЪ рддреЗ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддрд╛рдд, рдкрд░рдВрддреБ рдХреЗрд╡рд│ HQL рдХреНрд╡реЗрд░реАрдЪрд╛ рднрд╛рдЧ рдореНрд╣рдгреВрди. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде рдпрд╛рд╕рд╛рд░рдЦреЗ:
public class CommentsManager {
private static final PAGE_SIZE = 50;
public List<Comment> getCommentsPage(int userId, int pageIndex){
String hql = "select comments from User where id = :id";
Query<Comment> query = session.createQuery( hql, Comment.class);
query.setParametr("id", userId);
query.setOffset(pageIndex * PAGE_SIZE);
query.setLimit(PAGE_SIZE);
return query.list();
}
public int getCommentsPageCount(int userId) {
String hql = "select count(comments) from User where id = :id";
Query<Integer> query = session.createQuery( hql, Integer.class);
query.setParametr("id", userId);
return Math.ceil(query.singleResult()/PAGE_SIZE);
}
}
рдЪрд╛рдВрдЧрд▓реА рдмрд╛рддрдореА рдЕрд╢реА рдЖрд╣реЗ рдХреА рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ рдкрджреНрдзрддреА рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рд▓рд╛рдЧреВ рдХрд░реВ рд╢рдХрддреЛ рдХреА рдЖрдореНрд╣рд╛рд▓рд╛ рдбреЗрдЯрд╛рдмреЗрд╕рдордзреВрди рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╛рд╣реА. рд╡рд╛рдИрдЯ рдмрд╛рддрдореА рдЕрд╢реА рдЖрд╣реЗ рдХреА рдЖрдордЪреНрдпрд╛ рд╕рдВрдЧреНрд░рд╣рд╛рдВрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреЗ рд╕реЛрдкреЗ рдирд╛рд╣реА.