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 рд╕реБрд░рдВрдЧ рдХреЗ рдЕрдВрдд рдореЗрдВ рдкреНрд░рдХрд╛рд╢
рдЗрд╕рд▓рд┐рдП, рдХреЛрдИ рднреА рд╣рдорд╛рд░реЗ рдЕрджреНрднреБрдд рдмрд╛рд▓ рд╕рдВрдЧреНрд░рд╣реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдирд╣реАрдВ, рдмреЗрд╢рдХ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдЪрдХреНрдпреВрдПрд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣:
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);
}
}
рдЕрдЪреНрдЫреА рдЦрдмрд░ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдЗрд╕ рддрд░рд╣ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдмреБрд░реА рдЦрдмрд░ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рд╕рдВрдЧреНрд░рд╣реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред