
рдкрд░рд┐рдЪрдп
рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдХрд┐рд╕реА рднреА рд╕реВрдЪрдирд╛ рдкреНрд░рдгрд╛рд▓реА рдпрд╛ рдмрд╛рд╣рд░реА рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрддред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рдПрдХ рд╕рдВрдмрдВрдзрдкрд░рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реИ, рдФрд░, рдЕрдХреНрд╕рд░, рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдУрдЖрд░рдПрдо рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред ORM рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдореВрд░реНрдд рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╕реЗрдЯ рджреЗрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЕрдзрд┐рдХрд╛рдВрд╢ рдирд┐рдпрдорд┐рдд рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрддрд╛ рд╣реИред
рдорд╛рд░реНрдЯрд┐рди рдлрд╛рдЙрд▓рд░ рдиреЗ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдПрдХ рдкреНрд░рдореБрдЦ рд╡рд┐рдЪрд╛рд░ рдерд╛: "ORMs рд╣рдореЗрдВ рдЙрджреНрдпрдо рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВ ... рдЗрд╕ рдЙрдкрдХрд░рдг рдХреЛ рд╕реБрдВрджрд░ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд┐рди рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рд╡реЗ рдЕрдЪреНрдЫреЗ рдирд╣реАрдВ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдУрдЖрд░рдПрдо рдЕрдзрд┐рдХ рд╕рдореНрдорд╛рди рдФрд░ рдЕрдзрд┐рдХ рд╕рдордЭ рдХреЗ рд╣рдХрджрд╛рд░ рд╣реИрдВред "
рд╣рдо рд╕реАрдпреВрдмреАрдП рдврд╛рдВрдЪреЗ рдореЗрдВ рдУрдЖрд░рдПрдо рдХрд╛ рдмрд╣реБрдд рдЧрд╣рдирддрд╛ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕ рддрдХрдиреАрдХ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдФрд░ рд╕реАрдорд╛рдУрдВ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕реАрдпреВрдмреАрдП рдХрд╛ рдЙрдкрдпреЛрдЧ рджреБрдирд┐рдпрд╛ рднрд░ рдХреА рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдУрдЖрд░рдПрдо рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдХрдИ рд╡рд┐рд╖рдпреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗ: "рд▓реЗрдЬрд╝реАрдЬрд╝" (рдЖрд▓рд╕реА) рдФрд░ рдбреЗрдЯрд╛ рд╕реИрдВрдкрд▓рд┐рдВрдЧ рдХреЗ "рд▓рд╛рд▓рдЪреА" (рдЙрддреНрд╕реБрдХ) рддрд░реАрдХреЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛ рд╡рд┐рдХрд▓реНрдкред рд╣рдо рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЬреЗрдкреАрдП рдПрдкреАрдЖрдИ рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рд╕реЗ рдЪрд┐рддреНрд░рдг рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдпрд╣ рднреА рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдХреИрд╕реЗ (рдФрд░ рдХреНрдпреЛрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ) рд╕реАрдпреВрдмреАрдП рдореЗрдВ рдУрдЖрд░рдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣рдо рдЕрдкрдиреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдбреЗрдЯрд╛ рдХрд╛ рдирдореВрдирд╛: рдЖрд▓рд╕реА рдпрд╛ рдирд╣реАрдВ?
рдпрджрд┐ рдЖрдкрдХреЗ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЗрдХрд╛рдИ рд╣реИ, рддреЛ рдЖрдк ORM рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдХрд┐рд╕реА рднреА рд╕рдорд╕реНрдпрд╛ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдВрдЧреЗред рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрддреЗ рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ User ()
рдЗрдХрд╛рдИ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рджреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╣реИрдВ: ID
рдФрд░ Name ()
:
public class User { @Id @GeneratedValue private int id; private String name;
рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЗрд╕ рдЗрдХрд╛рдИ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕рд┐рд░реНрдл EntityManager
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
EntityManager em = entityManagerFactory.createEntityManager(); User user = em.find(User.class, id);
рдЬрдм рдПрдХ-рд╕реЗ-рдХрдИ рд╕рдВрдмрдВрдз рдкреНрд░рдХрдЯ рд╣реЛрддреЗ рд╣реИрдВ рддреЛ рдЪреАрдЬреЗрдВ рдереЛрдбрд╝реА рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ:
public class User { @Id @GeneratedValue private int id; private String name; @OneToMany private List<Address> addresses;
рдпрджрд┐ рд╣рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ: "рдХреНрдпрд╛ рд╣рдо рдкрддреЗ рднреА рдЪреБрдирддреЗ рд╣реИрдВ?"ред рдФрд░ рдпрд╣рд╛рдБ "рд╕рд╣реА" рдЙрддреНрддрд░ рд╣реИ: "рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ ..." рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╣рдореЗрдВ рдкрддреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдХреБрдЫ рдореЗрдВ - рдирд╣реАрдВред рдЖрдорддреМрд░ рдкрд░, рдУрдЖрд░рдПрдо рдирд┐рд░реНрднрд░ рд░рд┐рдХреЙрд░реНрдб рд▓рд╛рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ: рдЖрд▓рд╕реА рдФрд░ рд▓рд╛рд▓рдЪреАред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЕрдзрд┐рдХрд╛рдВрд╢ ORM рдЖрд▓рд╕реА рддрд░реАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди, рдЕрдЧрд░ рд╣рдо рдпрд╣ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
EntityManager em = entityManagerFactory.createEntityManager(); User user = em.find(User.class, 1); em.close(); System.out.println(user.getAddresses().get(0));
... рддреЛ рд╣рдореЗрдВ тАЬLazyInitExceptionтАЭ
рдЕрдкрд╡рд╛рдж рдорд┐рд▓рддрд╛ рд╣реИ, рдЬреЛ рдмрд╣реБрдд рдирдП рд▓реЛрдЧреЛрдВ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдУрдЖрд░рдПрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдФрд░ рдпрд╣рд╛рдВ рд╡рд╣ рдХреНрд╖рдг рдЖрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдПрдХ рдЗрдХрд╛рдИ рдХреЗ "рд╕рдВрд▓рдЧреНрди" рдФрд░ "рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП" рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдХрд╣рд╛рдиреА рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╕рддреНрд░ рдФрд░ рд▓реЗрдирджреЗрди рдХреНрдпрд╛ рд╣реИрдВред
рд╣рд╛рдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕рддреНрд░ рдХреЗ рд▓рд┐рдП рдЗрдХрд╛рдИ рдХреЛ "рд╕рдВрд▓рдЧреНрди" рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдЖрдк рдирд┐рд░реНрднрд░ рдбреЗрдЯрд╛ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХреЗрдВред рдареАрдХ рд╣реИ, рдЪрд▓реЛ рдЕрднреА рд▓реЗрдирджреЗрди рдХреЛ рдмрдВрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЬреАрд╡рди рддреБрд░рдВрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдпрд╣рд╛рдВ рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рд╣реЛрддреА рд╣реИ - рд▓реЗрди-рджреЗрди рд▓рдВрдмрд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЧрддрд┐рд░реЛрдз рдХрд╛ рдЦрддрд░рд╛ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдирджреЗрди рдХрдо рдХрд░реЗрдВ? рдпрд╣ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдХрдИ, рдХрдИ рдЫреЛрдЯреЗ рд▓реЗрди-рджреЗрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ "рдЯреЗрд▓ рдСрдлрд╝ рдХреЛрдорд╛рд░ рдХреЛрдорд╛рд░реЛрд╡рд┐рдЪ - рдПрдХ рд▓рдВрдмреА рдирд╛рдХ рдФрд░ рдПрдХ рдкреНрдпрд╛рд░реЗ рдорд┐рд╢рд╛ - рдПрдХ рдЫреЛрдЯреА рдкреВрдВрдЫ" рдорд┐рд▓рддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐ рдЫреЛрдЯреЗ рднрд╛рд▓реВ рдордЪреНрдЫрд░реЛрдВ рдХреА рднреАрдбрд╝ рдХреИрд╕реЗ рдЬреАрддреА рд╣реИ - рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЫреЛрдЯреЗ рд▓реЗрдирджреЗрди рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрд╛рдлреА рд╡реГрджреНрдзрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рдкреНрд░рджрд░реНрд╢рди рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрдВрдЧреАред
рдЬреИрд╕рд╛ рдХрд┐ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛, рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдкрддреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдЗрд╕рд▓рд┐рдП, рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрдкрдХреЛ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдХреЛрдб рдореЗрдВ рдирдИ рд╢рд░реНрддреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ ... рд╣рдореНрдореН ... рдХреБрдЫ рдХрд┐рд╕реА рддрд░рд╣ рдЬрдЯрд┐рд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИред
рддреЛ, рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЖрдк рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирдореВрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ?
public class User { @Id @GeneratedValue private int id; private String name; @OneToMany(fetch = FetchType.EAGER) private List<Address> addresses;
рдЦреИрд░ ... рдЖрдк рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддреЗ рдХрд┐ рдЗрд╕рд╕реЗ рдмрд╣реБрдд рдорджрдж рдорд┐рд▓реЗрдЧреАред рд╣рд╛рдВ, рд╣рдо рдШреГрдгрд┐рдд LazyInit
рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓реЗрдВрдЧреЗ рдФрд░ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрдХрд╛рдИ рд╕рддреНрд░ рд╕реЗ рдЬреБрдбрд╝реА рд╣реИ рдпрд╛ рдирд╣реАрдВред рд▓реЗрдХрд┐рди рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рджрд░реНрд╢рди рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рд╣рдореЗрд╢рд╛ рдкрддреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рд╕рд░реНрд╡рд░ рдХреА рдореЗрдореЛрд░реА рдореЗрдВ рдЗрди рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВред
рдХреЛрдИ рдФрд░ рд╡рд┐рдЪрд╛рд░?
рд╕реНрдкреНрд░рд┐рдВрдЧ рдЬреЗрдбреАрдмреАрд╕реА
рдХреБрдЫ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдУрдЖрд░рдПрдо рд╕реЗ рдЗрддрдиреЗ рдердХ рдЧрдП рд╣реИрдВ рдХрд┐ рд╡реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдкреНрд░рд┐рдВрдЧ рдЬреЗрдбреАрдмреАрд╕реА рдкрд░, рдЬреЛ рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрдЯрд╛ рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдбреЗрдЯрд╛ рдХреЛ "рд╕реЗрдореА-рдСрдЯреЛрдореИрдЯрд┐рдХ" рдореЛрдб рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдбреЗрд╡рд▓рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдХреНрд╡реЗрд░реАрдЬрд╝ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕реЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдпрд╛ рд╕рдорд╛рди рдХреЛрдб рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рд╕рдорд╛рди рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ)ред
рдЗрд╕рд╕реЗ рд╣рдореЗрдВ рдХрд╛рдлреА рд▓рдЪреАрд▓рд╛рдкрди рдорд┐рд▓рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕рдВрдмрдВрдзрд┐рдд рдирд┐рдХрд╛рдп рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдП рдмрд┐рдирд╛ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
String name = this.jdbcTemplate.queryForObject( "select name from t_user where id = ?", new Object[]{1L}, String.class);
рдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рдореЗрдВ рдПрдХ рд╡рд╕реНрддреБ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ:
User user = this.jdbcTemplate.queryForObject( "select id, name from t_user where id = ?", new Object[]{1L}, new RowMapper<User>() { public User mapRow(ResultSet rs, int rowNum) throws SQLException { User user = new User(); user.setName(rs.getString("name")); user.setId(rs.getInt("id")); return user; } });
рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдкрддреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рднреА рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ n + 1 рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдФрд░ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ SQL рдХреНрд╡реЗрд░реА рдХреА рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд░рдЪрдирд╛ рдХрд░рдиреА рд╣реЛрдЧреАред
рд╕реВ, рдлрд┐рд░ рд╕реЗ рдЬрдЯрд┐рд▓ред рд╣рд╛рдВ, рд╣рдо рд╕рднреА рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдбреЗрдЯрд╛ рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдкрд░ рдореИрдк рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЕрдзрд┐рдХ рдХреЛрдб рд▓рд┐рдЦрдиреЗ, SQL рд╕реАрдЦрдиреЗ рдФрд░ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрд╕рдХреНрдпреВрдПрд▓ рдХрд╛ рдЬреНрдЮрд╛рди рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд╢реНрдпрдХ рдХреМрд╢рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рд░ рдХреЛрдИ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рд╕реЛрдЪрддрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдкреЛрд▓реЗрдорд┐рдХреНрд╕ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдирд╣реАрдВ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдЖрдЦрд┐рд░рдХрд╛рд░, рдЗрди рджрд┐рдиреЛрдВ x86 рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЬреНрдЮрд╛рди рднреА рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред рдЖрдЗрдП рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред
JPA EntityGraph
рдФрд░ рдЪрд▓реЛ рдПрдХ рдХрджрдо рдкреАрдЫреЗ рд╣рдЯреЛ рдФрд░ рд╕реЛрдЪреЛ, рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдореЗрдВ рдХрд┐рди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдЪреНрдЫрд╛, рдЪрд▓реЛ рдХрд░рддреЗ рд╣реИрдВ! рдЬреЗрдкреАрдП 2.1 рдиреЗ рдПрдХ рдирдпрд╛ рдПрдкреАрдЖрдИ - рдПрдВрдЯрд┐рдЯреАрдЧреНрд░рд╛рдл (рдЗрдХрд╛рдИ рдЧреНрд░рд╛рдл) рдкреЗрд╢ рдХрд┐рдпрд╛ред рд╡рд┐рдЪрд╛рд░ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ: рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХреНрдпрд╛ рдЪреБрдиреЗрдВрдЧреЗ, рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
@Entity @NamedEntityGraphs({ @NamedEntityGraph(name = "user-only-entity-graph"), @NamedEntityGraph(name = "user-addresses-entity-graph", attributeNodes = {@NamedAttributeNode("addresses")}) }) public class User { @Id @GeneratedValue private int id; private String name; @OneToMany(fetch = FetchType.LAZY) private Set<Address> addresses;
рдЗрд╕ рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рджреЛ рд░реЗрдЦрд╛рдВрдХрди рд╡рд░реНрдгрд┐рдд рд╣реИрдВ: user-only-entity-graph
Addresses
рд╡рд┐рд╢реЗрд╖рддрд╛ (рдЖрд▓рд╕реА рд▓реЗрдмрд▓) рдХрд╛ рдЪрдпрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рджреВрд╕рд░рд╛ рдЧреНрд░рд╛рдл ORM рдХреЛ рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо Addresses
рдХреЛ рдЙрддреНрд╕реБрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЧреНрд░рд╛рдл рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдкрддреЗ рд╡реИрд╕реЗ рднреА рдЪреБрдиреЗ рдЬрд╛рдПрдВрдЧреЗред
рддреЛ, JPA 2.1 рдореЗрдВ, рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдирдореВрдирд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ:
EntityManager em = entityManagerFactory.createEntityManager(); EntityGraph graph = em.getEntityGraph("user-addresses-entity-graph"); Map<String, Object> properties = Map.of("javax.persistence.fetchgraph", graph); User user = em.find(User.class, 1, properties); em.close();
рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рдо рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ, рдЖрд▓рд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рд▓реЗрдирджреЗрди рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрд▓рдЧ рд╕реЗ рд╕реЛрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдмреЛрдирд╕ рдпрд╣ рд╣реИ рдХрд┐ рдЧреНрд░рд╛рдл SQL рдХреНрд╡реЗрд░реА рдХреЗ рд╕реНрддрд░ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ "рдЕрддрд┐рд░рд┐рдХреНрдд" рдбреЗрдЯрд╛ рдХрд╛ рдЪрдпрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕рдорд╕реНрдпрд╛ рд╣реИ: рдЖрдк рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реЗ рдЧреБрдг рдЪреБрдиреЗ рдЧрдП рдереЗ рдФрд░ рдХреМрди рд╕реЗ рдирд╣реАрдВ рдереЗред рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреАрдЖрдИ рд╣реИ, рдпрд╣ PersistenceUtil
рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
PersistenceUtil pu = entityManagerFactory.getPersistenceUnitUtil(); System.out.println("User.addresses loaded: " + pu.isLoaded(user, "addresses"));
рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдиреАрд░рд╕ рд╣реИ рдФрд░ рд╣рд░ рдХреЛрдИ рдЗрд╕ рддрд░рд╣ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдХреБрдЫ рдФрд░ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рд╕рд░рд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рд┐рд░реНрдл рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдирд╣реАрдВ рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЪреБрдирд╛ рдирд╣реАрдВ рдЧрдпрд╛ рдерд╛?
рд╡рд╕рдВрдд рдЕрдиреБрдорд╛рди
рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдЕрдиреБрдорд╛рдиреЛрдВ рдХреА рдПрдХ рдорд╣рд╛рди рдЪреАрдЬрд╝ рд╣реИ (рдФрд░ рдпрд╣ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдореЗрдВ рдЕрдиреБрдорд╛рдиреЛрдВ рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ)ред рдпрджрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдЗрдХрд╛рдИ рдХреА рдХреЗрд╡рд▓ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╡рд╛рд▓рд╛ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ "рдЗрдВрд╕реНрдЯреЗрдВрд╕" рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
interface NamesOnly { String getName(); }
рдЕрдм рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкреНрд░рд┐рдВрдЧ рдЬреЗрдкреАрдП рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
interface UserRepository extends CrudRepository<User, Integer> { Collection<NamesOnly> findByName(String lastname); }
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, findByName рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдкрд░рд┐рдгрд╛рдореА рд╕реВрдЪреА рдореЗрдВ рд╣рдореЗрдВ рдРрд╕реА рд╕рдВрд╕реНрдерд╛рдПрдВ рдорд┐рд▓рддреА рд╣реИрдВ рдЬрд┐рдирдХреА рдкрд╣реБрдВрдЪ рдХреЗрд╡рд▓ рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рддрдХ рд╣реЛрддреА рд╣реИ рдЬреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВ! рдЙрд╕реА рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдирд┐рд░реНрднрд░ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдЪреБрди рд╕рдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреНред рддреБрд░рдВрдд "рдорд╛рд╕реНрдЯрд░-рдбрд┐рдЯреЗрд▓" рд░рд┐рд▓реЗрд╢рди рдЪреБрдиреЗрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрдкреНрд░рд┐рдВрдЧ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ "рд╕рд╣реА" SQL рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдХреЗрд╡рд▓ рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЬреЛ рдкреНрд░рдХреНрд╖реЗрдкрдг рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИрдВ, рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЪреБрдиреЗ рдЧрдП рд╣реИрдВ, рдпрд╣ рдмрд╣реБрдд рд╣реА рд╕рдорд╛рди рд╣реИ рдХрд┐ рдЗрдХрд╛рдИ рдЧреНрд░рд╛рдлрд╝ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдПрдкреАрдЖрдИ рд╣реИред рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЖрдк рд╕реНрдкреЗрд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдмрдЬрд╛рдп рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдмрд╣реБрдд рдХреБрдЫ, рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╕рдм рдХреБрдЫ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИред
рдЕрдиреБрдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХрдорд╛рддреНрд░ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдВрджрд░ рдЙрдиреНрд╣реЗрдВ рдХреБрдВрдЬреА - рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рднрд▓реЗ рд╣реА рд╣рдо рдкреНрд░рдХреНрд╖реЗрдкрдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрдЯрд░ рд╡рд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рд╕реАрдЖрд░рдпреВрдбреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ рдПрдВрдЯрд┐рдЯреА рдореИрдирдЬрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП рдЕрдиреБрдорд╛рди рдбреАрдЯреАрдУ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╡рд╛рдкрд╕ рдЗрдХрд╛рдИ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рддрднреА рдмрдЪрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВред
CUBA рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдЪрдпрди рдХреИрд╕реЗ рдХрд░реЗрдВ
рд╕реАрдпреВрдмреАрдП рдврд╛рдВрдЪреЗ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ, рд╣рдордиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред CUBA рдореЗрдВ, рд╣рдо рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ API рдХреЗ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ EclipseLink рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред EclipseLink рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╢реБрд░реВ рд╕реЗ рд╣реА рдЖрдВрд╢рд┐рдХ рдЗрдХрд╛рдИ рд▓реЛрдбрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ, рдФрд░ рдпрд╣ рдЗрд╕рдХреЗ рдФрд░ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХреЗ рдмреАрдЪ рдЪрдпрди рдХрд░рдиреЗ рдореЗрдВ рдПрдХ рдирд┐рд░реНрдгрд╛рдпрдХ рдХрд╛рд░рдХ рдерд╛ред EclipseLink рдореЗрдВ, рдЖрдк JPA 2.1 рдорд╛рдирдХ рдХреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред CUBA рдХреЗ рдкрд╛рд╕ рдПрдХ рдЗрдХрд╛рдИ рдЧреНрд░рд╛рдл рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдЕрдкрдирд╛ рддрд░реАрдХрд╛ рд╣реИ, рдЬрд┐рд╕реЗ CUBA Views рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реАрдпреВрдмреАрдП рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рд╡рд┐рдХрд╕рд┐рдд рдПрдкреАрдЖрдИ рд╣реИ, рдЖрдк рджреВрд╕рд░реЛрдВ рд╕реЗ рдХреБрдЫ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рджреЛрдиреЛрдВ рдорд╛рд╕реНрдЯрд░ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕реАрдпреВрдмреАрдП рд╡рд┐рдЪрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдкреНрд░реЗрд░рдгрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЫреЛрдЯреЗ рд▓реЗрдирджреЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ рддрд╛рдХрд┐ рд╣рдо рд╡реЗрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдЕрд▓рдЧ-рдерд▓рдЧ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХреЗрдВред
CUBA рдореЗрдВ, рд╡рд┐рдЪрд╛рд░ XML рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣реИ:
<view class="com.sample.User" extends="_minimal" name="user-minimal-view"> <property name="name"/> <property name="addresses" view="address-street-only-view"/> </property> </view>
рдпрд╣ рджреГрд╢реНрдп User
рдЗрдХрд╛рдИ рдФрд░ рдЙрд╕рдХреЗ рд╕реНрдерд╛рдиреАрдп рд╡рд┐рд╢реЗрд╖рддрд╛ name
рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП address-street-only-view
рд▓рд╛рдЧреВ рдХрд░рдХреЗ address-street-only-view
рдХрд╛ рдЪрдпрди рднреА рдХрд░рддрд╛ address-street-only-view
ред рдпрд╣ рд╕рдм рд╣реЛрддрд╛ рд╣реИ (рдзреНрдпрд╛рди!) SQL рдХреНрд╡реЗрд░реА рдХреЗ рд╕реНрддрд░ рдкрд░ред рдЬрдм рджреГрд╢реНрдп рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдбреЗрдЯрд╛ рдЪрдпрди рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рдмрдВрдзрдХ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
List<User> users = dataManager.load(User.class).view("user-edit-view").list();
рдиреЗрдЯрд╡рд░реНрдХ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдкреНрд░рдпреБрдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдХреЗрд╡рд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рдЬреЗрдкреАрдП рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ: рдпрд╣ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрдХрд╛рдИ рдХреЗ рдХреМрди рд╕реЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред тАЬIllegalStateException: Cannot get unfetched attribute [...] from detached objectтАЭ
рдореЗрдВ рдПрдХ рдЕрдкрд╡рд╛рдж рд╣реИ тАЬIllegalStateException: Cannot get unfetched attribute [...] from detached objectтАЭ
, рдЬреЛ, LazyInit
рддрд░рд╣, рд╣рдорд╛рд░реЗ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬреЗрдкреАрдП рдХреА рддрд░рд╣, рдпрд╣ рдЬрд╛рдБрдЪрдиреЗ рдХреЗ рднреА рддрд░реАрдХреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рднрд░реА рд╣реБрдИ рдереАрдВ рдФрд░ рдХреМрди рд╕реА рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди, рдлрд┐рд░ рд╕реЗ, рдРрд╕реЗ рдЪреЗрдХ рд▓рд┐рдЦрдирд╛ рдПрдХ рдердХрд╛рдК, рд╢реНрд░рдорд╕рд╛рдзреНрдп рдХрд╛рд░реНрдп рд╣реИ рдЬреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдмрд╣реБрдд рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реИред рдХреБрдЫ рдФрд░ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдХрд╛рдо рдХреЗ рд╕рд╛рде рд▓реЛрдЧреЛрдВ рдХреЛ рдмреЛрдЭ рди рдХрд░реЗрдВ, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдорд╢реАрдиреЗрдВ рдХрд░ рд╕рдХрддреА рд╣реИрдВред
рдЕрд╡рдзрд╛рд░рдгрд╛ - рд╕реАрдпреВрдмреАрдП рдЗрдВрдЯрд░рдлреЗрд╕ рджреЗрдЦреЗрдВ
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЖрдк рдЗрдХрд╛рдИ рдХреЗ рдЧреНрд░рд╛рдл рдФрд░ рдЕрдиреБрдорд╛рдиреЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ? рд╣рдордиреЗ рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЗрдХрд╛рдИ рд╡реНрдпреВ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рдПред рдЗрди рдЗрдВрдЯрд░рдлреЗрд╕реЛрдВ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ CUBA рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ DataManager рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рдЪрд╛рд░ рд╕рд░рд▓ рд╣реИ: рд╣рдо рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдпрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдПрдХ рд╕реЗрдЯ) рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рдЗрдХрд╛рдИ рдЧреНрд░рд╛рдл рд╣реИред
interface UserMinimalView extends BaseEntityView<User, Integer> { String getName(); void setName(String val); List<AddressStreetOnly> getAddresses(); interface AddressStreetOnly extends BaseEntityView<Address, Integer> { String getStreet(); void setStreet(String street); } }
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕реНрдерд╛рдиреАрдп рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рд╕реЗ AddressStreetOnly
рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдХреЛ "рдкреНрд░рджреВрд╖рд┐рдд" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред
рд╕реАрдпреВрдмреАрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ (рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реНрдкреНрд░рд┐рдВрдЧ рд╕рдВрджрд░реНрдн рдХрд╛ рдЖрд░рдВрднреАрдХрд░рдг рд╣реИ), рд╣рдо рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рд╕реАрдпреВрдмреАрдП рджреГрд╢реНрдп рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рдмреАрди рднрдВрдбрд╛рд░ рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВред
рдЕрдм рдЖрдкрдХреЛ DataManager рд╡рд░реНрдЧ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡рд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджреГрд╢реНрдпреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд▓реЗ, рдФрд░ рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
List<UserMinimalView> users = dataManager.load(UserMinimalView.class).list();
рд╣реБрдб рдХреЗ рддрд╣рдд, рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЪрдпрдирд┐рдд рдЗрдХрд╛рдИ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рдкреЗрдЯрддрд╛ рд╣реИ (рдЙрд╕реА рддрд░рд╣ рдЬреИрд╕реЗ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдореЗрдВ)ред рдФрд░, рдЬрдм рдбреЗрд╡рд▓рдкрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд╛рди рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдкреНрд░реЙрдХреНрд╕реА рдЗрдХрд╛рдИ рдХреЗ "рд╡рд╛рд╕реНрддрд╡рд┐рдХ" рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред
рдЗрд╕ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ, рд╣рдо рдПрдХ рдкрддреНрдерд░ рд╕реЗ рджреЛ рдкрдХреНрд╖рд┐рдпреЛрдВ рдХреЛ рдорд╛рд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ:
- рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдбреЗрдЯрд╛ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕рд░реНрд╡рд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдмрдЪрдд рд╣реЛрддреА рд╣реИред
- рдбреЗрд╡рд▓рдкрд░ рдХреЗрд╡рд▓ рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рд╣реИрдВ (рдФрд░, рдЗрд╕рд▓рд┐рдП, рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЪреБрдиреЗ рдЧрдП рд╣реИрдВ), рдЬрд┐рд╕рд╕реЗ
UnfetchedAttribute
рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рд╣рдордиреЗ рдКрдкрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛ред
рд╕реНрдкреНрд░рд┐рдВрдЧ рдЕрдиреБрдорд╛рдиреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╣рдо рдЫрджреНрдо рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рддреНрдпреЗрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдорд╛рдирдХ CUBA рдЗрдВрдЯрд░рдлрд╝реЗрд╕ - Entity
рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдВрдЯрд┐рдЯреА рд╡реНрдпреВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ CUBA API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рд╣реЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред
рдФрд░, рд╡реИрд╕реЗ, "рддреАрд╕рд░рд╛ рдЦрд░рдЧреЛрд╢" - рдЖрдк рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдХреЗрд╡рд▓ рддрднреА рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдм рдЖрдк рдХреЗрд╡рд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрдХрд╛рдИ рдПрдкреАрдЖрдИ рд╕реНрддрд░ рдкрд░ рд╕рдВрд╢реЛрдзрди рдирд┐рдпрдореЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдЙрдкрд▓рдмреНрдз рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реНрдерд╛рдиреАрдп рдСрдкрд░реЗрд╢рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд╛рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рд░реВрдкрд╛рдВрддрд░рдг, рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ:
@MetaProperty default String getNameLowercase() { return getName().toLowerCase(); }
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЗрдХрд╛рдИ рд╡рд░реНрдЧ рдореЙрдбрд▓ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рд░рд╛рд╕рдд рд╣реИред рдЖрдк рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реЗрдЯреЛрдВ рдХреЗ рд╕рд╛рде рдХрдИ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдирд╛рдо рдФрд░ рдИрдореЗрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░рд╛ рдирд╛рдо рдФрд░ рдкрддреЗ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рдеред рдЕрдм, рдпрджрд┐ рдЖрдкрдХреЛ рдирд╛рдо, рдИрдореЗрд▓ рдФрд░ рдкрддреЗ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рддреАрд╕рд░реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рджреЛ рд╡рд┐рдЪрд╛рд░реЛрдВ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рд╣рд╛рдВ, рддреАрд╕рд░реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЙрди рддрд░реАрдХреЛрдВ рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдУрдУрдкреА рдирд┐рдпрдо рд╕рднреА рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИрдВред
рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рд░реВрдкрд╛рдВрддрд░рдг рднреА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рдкреНрд░рддреНрдпреЗрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдПрдХ рдкреБрдирдГ рд▓реЛрдб () рд╡рд┐рдзрд┐ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рджреГрд╢реНрдп рд╡рд░реНрдЧ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
UserFullView userFull = userMinimal.reload(UserFullView.class);
UserFullView рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЗрдХрд╛рдИ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдкреБрдирдГ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рджреЗрд░реА рд╣реЛ рд░рд╣реА рд╣реИред рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗрд╡рд▓ рддрдм рдмрдирд╛рдИ рдЬрд╛рдПрдЧреА рдЬрдм рдЗрдХрд╛рдИ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рддрдХ рдкрд╣рд▓реА рдкрд╣реБрдВрдЪ рд╣реЛрддреА рд╣реИред рдпрд╣ рдкрд╣рд▓реЗ рдХреЙрд▓ рдХреЛ рдереЛрдбрд╝рд╛ рдзреАрдорд╛ рдХрд░ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ - рдпрджрд┐ рдЗрдХрд╛рдИ рдЙрджрд╛рд╣рд░рдг "рд╡реЗрдм" рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ UI рдФрд░ рдЗрд╕рдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдирд┐рдпрдВрддреНрд░рдХ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдореЙрдбреНрдпреВрд▓ рдПрдХ рдЕрд▓рдЧ рд╕рд░реНрд╡рд░ рдкрд░ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрдХрд╛рдИ рдХрд╛ рдордЬрдмреВрд░ рдЕрдзрд┐рднрд╛рд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдиреЗрдЯрд╡рд░реНрдХ рдЯреНрд░реИрдлрд╝рд┐рдХ - рдХреЛрд░ рдореЙрдбреНрдпреВрд▓ рдФрд░ рдлрд┐рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдмрдирд╛рдПрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЬрдм рддрдХ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддрдм рддрдХ рдУрд╡рд░рд▓реЛрдб рдХреЛ рдмрдВрдж рдХрд░рдирд╛, рд╣рдо рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдмрдЪрд╛рддреЗ рд╣реИрдВ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реИрдВред
рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ CUBA рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, GitHub рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред
рдирд┐рд╖реНрдХрд░реНрд╖
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдо рдЕрднреА рднреА рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдЙрджреНрдпрдо рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдУрдЖрд░рдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрдЯрд╛ рдХреЛ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдмрджрд▓ рджреЗрдЧрд╛ред рдмреЗрд╢рдХ, рдЬрдЯрд┐рд▓, рдЕрджреНрд╡рд┐рддреАрдп, рдЕрд▓реНрдЯреНрд░рд╛-рд╣рд╛рдИ-рд▓реЛрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдУрдЖрд░рдПрдо рдврд╛рдВрдЪреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд░рд╣реЗрдВрдЧреЗред
CUBA рдореЗрдВ, рд╣рдо ORM рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рдЕрдзрд┐рдХрддрдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╣рдо рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдкреЗрд╢ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдХрд╣рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ рдХрд┐ рдпреЗ рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рди рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реЛрдВрдЧреЗ рдпрд╛ рдХреБрдЫ рдФрд░, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрдХ рдмрд╛рдд рдХрд╛ рдпрдХреАрди рд╣реИ: рд╣рдо рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗред