рдпрд╣ рд▓реЗрдЦ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХреА рдореВрд▓ рдмрд╛рддреЛрдВ рдХреЛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ (рдПрдХ рдЗрдХрд╛рдИ рдХреЛ рдХреИрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдпрд╛ рдорд╛рдирджрдВрдб рдХреНрд╡реЗрд░реА рд▓рд┐рдЦреЗрдВ)ред рдпрд╣рд╛рдВ рдореИрдВ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИрдВред рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдореБрдЭреЗ рдПрдХ рдЬрдЧрд╣ рдирд╣реАрдВ рдорд┐рд▓реАред

рдореИрдВ рддреБрд░рдВрдд рдЖрд░рдХреНрд╖рдг рдХрд░ рджреВрдВрдЧрд╛ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рд╕реЗ рд╕рднреА рд╣рд╛рдЗрдмрд░рдиреЗрдЯ 5.2 рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИрдВред рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рддреНрд░реБрдЯрд┐рдпрд╛рдВ рднреА рд╕рдВрднрд╡ рд╣реИрдВ рдХрд┐ рдореИрдВрдиреЗ рдХреБрдЫ рдЧрд▓рдд рд╕рдордЭрд╛ред рдпрджрд┐ рдЖрдк рдкрд╛рддреЗ рд╣реИрдВ - рд▓рд┐рдЦреЗрдВред
рдПрдХ рд╕рдорд╕реНрдпрд╛ рдореЙрдбрд▓ рдХреЛ рдПрдХ рд╕рдВрдмрдВрдз рдореЗрдВ рдореИрдк рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ
рд▓реЗрдХрд┐рди рдЖрдЗрдП ORM рдХреА рдореВрд▓ рдмрд╛рддреЛрдВ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред ORM - рдСрдмреНрдЬреЗрдХреНрдЯ-рд░рд┐рд▓реЗрд╢рдирд▓ рдореИрдкрд┐рдВрдЧ - рддрджрдиреБрд╕рд╛рд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд░рд┐рд▓реЗрд╢рдирд▓ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рд╣реИрдВред рдФрд░ рдЬрдм рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрдВ рдЕрдкрдиреЗ рджрдо рдкрд░ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЪрд▓реЛ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рд▓реЗ рдЬрд╛рдПрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рд▓реЗрдВ: рд╣рдорд╛рд░реЗ рдкрд╛рд╕ "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛" рдЗрдХрд╛рдИ рд╣реИ, рдЬреЛ рдпрд╛ рддреЛ рдЬреЗрдбреА рдпрд╛ рдЖрдХреНрд░рдордг рд╡рд┐рдорд╛рди рд╣реЛ рд╕рдХрддреА рд╣реИред рдЬреЗрдбреА рдореЗрдВ рддрд╛рдХрдд, рдФрд░ рд╣рдорд▓реЗ рдХреЗ рд╡рд┐рдорд╛рди рдХреА рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдиреАрдЪреЗ рдПрдХ рд╡рд░реНрдЧ рдЖрд░реЗрдЦ рд╣реИред

рд╕рдорд╕реНрдпрд╛ 1. рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдФрд░ рдмрд╣реБрд░реВрдкреА рдкреНрд░рд╢реНрдиред
рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рдореЗрдВ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рд╣реИ, рд▓реЗрдХрд┐рди рд░рд┐рд▓реЗрд╢рдирд▓ рдореЙрдбрд▓ рдореЗрдВ рдирд╣реАрдВред рддрджрдиреБрд╕рд╛рд░, рдпрд╣ рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рд╣реИ - рд░рд┐рд▓реЗрд╢рдирд▓ рдореЙрдбрд▓ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдХрд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирдХреНрд╢рд╛ рдХреИрд╕реЗ рдХрд░реЗрдВред
рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдРрд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 3 рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
- рд╕рднреА рд╡рд╛рд░рд┐рд╕ рдПрдХ рд╣реА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╣реИрдВ:
@ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо (рд░рдгрдиреАрддрд┐ = InheritanceType.SINGLE_TABLE)

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рд╛рдорд╛рдиреНрдп рдХреНрд╖реЗрддреНрд░ рдФрд░ рд╡рд╛рд░рд┐рд╕ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВред рдЗрд╕ рд░рдгрдиреАрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рд╕рдВрд╕реНрдерд╛рдУрдВ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╕рдордп рдЬреБрдбрд╝рдиреЗ рд╕реЗ рдмрдЪрддреЗ рд╣реИрдВред Minuses рдореЗрдВ рд╕реЗ, рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд░рд┐рд▓реЗрд╢рдирд▓ рдореЙрдбрд▓ рдореЗрдВ "рдмрд▓" рдХреЙрд▓рдо рдХреЗ рд▓рд┐рдП "NOT NULL" рдкреНрд░рддрд┐рдмрдВрдз рд╕реЗрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рд╣рдо рддреАрд╕рд░рд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рдЦреЛ рджреЗрддреЗ рд╣реИрдВред (рдЧреИрд░-рдкреНрд░рдореБрдЦ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдПрдХ рд╕рдХрд░рд╛рддреНрдордХ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдХрдЯ рд╣реЛрддреА рд╣реИ: рдмрд▓ рдФрд░ рдбрд┐рд╕реНрдХ)ред
рд╡реИрд╕реЗ, рдЗрд╕ рдХрд╛рд░рдг рд╕рд╣рд┐рдд, рдПрдХ рд╢реВрдиреНрдп рдХреНрд╖реЗрддреНрд░ рдмрд╛рдзрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ 2 рддрд░реАрдХреЗ рд╣реИрдВ - NotNull рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ; @ рдХреЙрд▓рдо (рдЕрд╢рдХреНрдд = рд╕рддреНрдп) - рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЕрд╢рдХреНрдд рдмрд╛рдзрд╛ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ред
рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рдХреЛ рд╕рдВрдмрдВрдзрдкрд░рдХ рдореЙрдбрд▓ рдореЗрдВ рдореИрдк рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИред
- рдЗрдХрд╛рдИ-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝реАрд▓реНрдб рдПрдХ рдЕрд▓рдЧ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╣реИрдВред
@ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо (рдХрд╛рд░реНрдпрдиреАрддрд┐ = InheritanceType.JOINED)

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рд╛рдорд╛рдиреНрдп рдлрд╝реАрд▓реНрдб рдХреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдмрд╛рд▓ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕ рд░рдгрдиреАрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдореЗрдВ рдПрдХ рдЗрдХрд╛рдИ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╕рдордп рдПрдХ JOIN рдорд┐рд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рддреАрд╕рд░реЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ NOT NULL рдмрд╛рдзрд╛ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред - рдкреНрд░рддреНрдпреЗрдХ рдЗрдХрд╛рдИ рдХреА рдЕрдкрдиреА рддрд╛рд▓рд┐рдХрд╛ рд╣реИред
@ InheritanceType.TABLE_PER_CLASS

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рддрд╛рд▓рд┐рдХрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рд░рдгрдиреАрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдмрд╣реБрд░реВрдкреА рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП UNION рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рдЬрдирд░реЗрдЯрд░ рдФрд░ рдЕрдиреНрдп рдЕрдЦрдВрдбрддрд╛ рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рд░рд╛рд╕рдд рдорд╛рдирдЪрд┐рддреНрд░рдг рджреГрдврд╝рддрд╛ рд╕реЗ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдмрд╕, рдореИрдВ рдЗрд╕ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реВрдВрдЧрд╛ - @MappedSuperclass рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЖрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рдХреА рдХрдИ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдлрд╝реАрд▓реНрдб рдХреЛ "рд╣рд╛рдЗрдб" рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдиреЛрдЯреЗрдЯ рд╡рд░реНрдЧ рдХреЛ рдЦреБрдж рдХреЛ рдПрдХ рдЕрд▓рдЧ рдЗрдХрд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рдорд╕реНрдпрд╛ 2. OOP рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдЕрдиреБрдкрд╛рдд
рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд▓реМрдЯрддреЗ рд╣реБрдП, рд╣рдо рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рдореЗрдВ рд╣рдордиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдЗрдХрд╛рдИ - рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓реЗ рд▓рд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рдВрдмрдВрдзрдкрд░рдХ рдореЙрдбрд▓ рдореЗрдВ, рд╣рдордиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЪрдпрди рдирд╣реАрдВ рдХрд┐рдпрд╛ред
OneToOne рдХрд╛ рд░рд╡реИрдпрд╛ рдЕрдХреНрд╕рд░ рдмреБрд░рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЪреБрдирд┐рдВрджрд╛ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрдиреБрдЪрд┐рдд рдЬреЙрдп рд╣реИ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ - рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ LAZY = LAZY - рд╣рдо рдмрд╛рдж рдореЗрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ)ред
рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдХрд┐рд╕реА рд░рдЪрдирд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @Embedable рдФрд░ @Embeded рдПрдиреЛрдЯреЗрд╢рди рд╣реИрдВред рдкрд╣рд▓рд╛ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдКрдкрд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рд╡рд░реНрдЧ рдХреЗ рдКрдкрд░ред рд╡реЗ рд╡рд┐рдирд┐рдореЗрдп рд╣реИрдВред
рдЗрдХрд╛рдИ рдкреНрд░рдмрдВрдзрдХ
EntityManager (EM) рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЙрджрд╛рд╣рд░рдг рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХреЗ рд╕рддреНрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдИрдПрдо рдЙрджрд╛рд╣рд░рдг рдХреЗ рднреАрддрд░, рдкрд╣рд▓реЗ рд╕реНрддрд░ рдХрд╛ рдХреИрд╢ рд╣реИред рдпрд╣рд╛рдБ рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓реВрдВрдЧрд╛:
- рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рдХреИрдкреНрдЪрд░ рдХрд░рдирд╛
рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ рд╣реИред рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдИрдПрдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд╕рдордп рдХрдиреЗрдХреНрд╢рди рдкрд░ рдХрдмреНрдЬрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкрд╣рд▓реА рдмрд╛рд░ рдкрд╣реБрдВрдЪ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рд▓реЗрдирджреЗрди рдХреЛ рдЦреЛрд▓рддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рд╕рдХрддреА рд╣реИ )ред рдпрд╣ рд╡реНрдпрд╕реНрдд рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рдордп рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдИрдПрдо-рдП рдХреА рдкреНрд░рд╛рдкреНрддрд┐ рдХреЗ рджреМрд░рд╛рди, рдЬреЗрдЯреАрдП рд▓реЗрдирджреЗрди рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИред - рд╕реНрдерд╛рдпреА рд╕рдВрд╕реНрдерд╛рдУрдВ рдореЗрдВ рд╣рдореЗрд╢рд╛ рдЖрдИрдбреА рд╣реЛрддреА рд╣реИ
- рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЗрдХрд╛рдЗрдпрд╛рдБ рд╕рдВрджрд░реНрдн рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддреА рд╣реИрдВ
рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдИрдПрдо рдореЗрдВ рдкрд╣рд▓реЗ рд╕реНрддрд░ рдХрд╛ рдХреИрд╢ рд╣реИ, рдЗрд╕рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рддреБрд▓рдирд╛ рд╕рдВрджрд░реНрдн рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИред рддрджрдиреБрд╕рд╛рд░, рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ - рдмрд░рд╛рдмрд░реА рдФрд░ рд╣реИрд╢рдХреЛрдб рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
- рдлреНрд▓рд╢ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рдлреНрд▓рд╢ - рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрдЪрд┐рдд рдЗрдиреНрд╕-рдПрд╕, рдЕрдкрдбреЗрдЯ-рдПрд╕ рдФрд░ рдбрд┐рд▓реАрдЯ-рдПрд╕ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдлреНрд▓рд╢ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ:
- рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ (em.get рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде), рдпрд╣ ACID рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рд╣рдордиреЗ рд╣рдорд▓реЗ рдХреЗ рд╡рд┐рдорд╛рди рдХреЗ рдЬрдиреНрдо рдХреА рддрд╛рд░реАрдЦ рдмрджрд▓ рджреА, рдФрд░ рдлрд┐рд░ рд╣рдо рд╡рдпрд╕реНрдХ рд╣рдорд▓реЗ рдХреЗ рд╡рд┐рдорд╛рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗред
рдЕрдЧрд░ рд╣рдо CriteriaQuery рдпрд╛ JPQL рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдлреНрд▓рд╢ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рдХреНрд╡реЗрд░реА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИ рдЬрд┐рд╕рдХреА рдЗрдХрд╛рдЗрдпрд╛рдВ рдкрд╣рд▓реЗ рд╕реНрддрд░ рдХреЗ рдХреИрд╢ рдореЗрдВ рд╣реИрдВред - рд▓реЗрдирджреЗрди рдХрд░рддреЗ рд╕рдордп;
- рдХрднреА-рдХрднреА рдПрдХ рдирдИ рдЗрдХрд╛рдИ рдХреЛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реБрдП - рдорд╛рдорд▓реЗ рдореЗрдВ рдЬрдм рд╣рдо рдХреЗрд╡рд▓ рдбрд╛рд▓рдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреА рдЖрдИрдбреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдФрд░ рдЕрдм рдереЛрдбрд╝рд╛ рдкрд░реАрдХреНрд╖рдгред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд┐рддрдиреЗ UPDATE рдСрдкрд░реЗрд╢рди рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ?
val spaceCraft = em.find(SpaceCraft.class, 1L); spaceCraft.setCoords(...); spaceCraft.setCompanion( findNearestSpaceCraft(spacecraft) );
рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд╕реБрд╡рд┐рдзрд╛ рдлреНрд▓рд╢ рдСрдкрд░реЗрд╢рди рдХреЗ рддрд╣рдд рдЫрд┐рдкреА рд╣реБрдИ рд╣реИ - рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд▓реЙрдХ рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓реЗ рд╕рдордп рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реА рд╣реИред
рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдлреНрд▓рд╢ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рдгрдиреАрддрд┐рдпрд╛рдБ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ "рд╡рд┐рд▓рдп" рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВ - рдЗрд╕реЗ MANUAL рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╣ рдЧрдВрджреЗ рдЬрд╛рдБрдЪ рддрдВрддреНрд░ рдХреЛ рднреА рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░ рджреЗрддрд╛ рд╣реИ)ред
- рдЧрдВрджреА рдЬрд╛рдБрдЪ
рдбрд░реНрдЯреА рдЪреЗрдХрд┐рдВрдЧ рдлреНрд▓рд╢ рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдПрдХ рддрдВрддреНрд░ рд╣реИред рдЗрд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЙрди рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдЦреЛрдЬрдирд╛ рд╣реИ рдЬреЛ рдмрджрд▓ рдЧрдП рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рддрдВрддреНрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдореВрд▓ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ (рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд╕реНрддреБ рдХреА рддреБрд▓рдирд╛ рдХрд┐рд╕рдХреЗ рд╕рд╛рде рдХреА рдЬрд╛рдПрдЧреА) рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд╡рд╕реНрддреБ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рдПрдХ рдкреНрд░рддрд┐ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рди рдХрд┐ рд╡рд╕реНрддреБ рдХреЛред
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрджрд┐ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХрд╛ рдЧреНрд░рд╛рдл рдмрдбрд╝рд╛ рд╣реИ, рддреЛ рдЧрдВрджреЗ рдЪреЗрдХрд┐рдВрдЧ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдорд╣рдВрдЧрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреА 2 рдкреНрд░рддрд┐рдпрд╛рдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ (рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдмреЛрд▓ рд░рд╣рд╛ рд╣реИ)ред
рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА "рд▓рд╛рдЧрдд рдХрдо рдХрд░рдиреЗ" рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
- em.detach / em.clear - EntityManager рд╕реЗ рдирд┐рдХрд╛рд▓реЗ рдЧрдП рдирд┐рдХрд╛рдп
- рдлреНрд▓рд╢рдореЙрдб = MANUAL- рд░реАрдб рдСрдкрд░реЗрд╢рдиреНрд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧреА
- рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп - рдЧрдВрджреЗ рдЬрд╛рдБрдЪ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рднреА рдмрдЪрддрд╛ рд╣реИ
- рд▓реЗрди-рджреЗрди
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рд▓реЗрдирджреЗрди рдХреЗ рднреАрддрд░ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдкрдврд╝реЗрдВ рдСрдкрд░реЗрд╢рди рдЕрдзрд┐рдХ рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ - рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓реЗрдирджреЗрди рдХреЛ рдЦреЛрд▓рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдЙрдиреНрд╣реЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдареАрдХ рд╕рд╡рд╛рд▓ рд╣реИ: рдХреНрдпрд╛ рд░реАрдб рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓реЗрди-рджреЗрди рдЦреЛрд▓рдирд╛ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИ?
рдореИрдВ рдХреБрдЫ рддрдереНрдпреЛрдВ рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреВрдВрдЧрд╛:
- рд▓реЗрдирджреЗрди рдХреЗ рдЕрдВрджрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рднрд▓реЗ рд╣реА рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдирд╣реАрдВ рдЦреЛрд▓рддреЗред (рдСрдЯреЛ-рдХрдорд┐рдЯ рдореЛрдб)ред
- рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╢реНрди рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рдкрд╣рд▓реЗ 10 рд░рд┐рдХреЙрд░реНрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╢рд╛рдпрдж рд░рд┐рдХреЙрд░реНрдб рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдФрд░ рдпрд╣ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ 2 рдЕрдиреБрд░реЛрдз рд╣реИред
- рдпрджрд┐ рд╣рдо рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рддрд░реАрдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЯреНрд░рд╛рдВрдЬреЗрдХреНрд╢рдирд▓ рд╣реИрдВ, рдЬрдмрдХрд┐ рд░реАрдб рдореЗрдердбреНрд╕ рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВред
- @Transactional рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдиреЛрдЯреЗрд╢рди (рд░реАрдбрдСрдирд▓реА = рд╕рдЪ) рднреА рдлреНрд▓рд╢рдореЛрдб рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рд╕реНрдкреНрд░рд┐рдВрдЧ рдЗрд╕реЗ MANUAL рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдЧрдВрджреА-рдЬрд╛рдБрдЪ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
- рдПрдХ рдпрд╛ рджреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдкрд░реАрдХреНрд╖рдг рджрд┐рдЦрд╛рдПрдЧрд╛ рдХрд┐ рдСрдЯреЛ-рдХрдорд┐рдЯ рддреЗрдЬ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдХрд╛рдмрд▓рд╛ рдореЛрдб рдореЗрдВ, рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред ( рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЙрддреНрдХреГрд╖реНрдЯ рд▓реЗрдЦ , рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рджреЗрдЦреЗрдВ)
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ: рдХрд┐рд╕реА рд▓реЗрдирджреЗрди рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рд╕рдВрдЪрд╛рд░ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИред
рдЬрдирд░реЗрдЯрд░
рдЬрдирд░реЗрдЯрд░реЛрдВ рдХреЛ рдпрд╣ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреА рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬрд┐рдпрд╛рдБ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреАред рдЪрд▓реЛ рдЬрд▓реНрджреА рд╕реЗ рд╡рд┐рдХрд▓реНрдк рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ:
- GenerationType.AUTO - рдЬрдирд░реЗрдЯрд░ рдЪрдпрди рдмреЛрд▓реА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ "рд╕реНрдкрд╖реНрдЯ рдирд┐рд╣рд┐рддрд╛рд░реНрде рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ" рдирд┐рдпрдо рдпрд╣рд╛рдВ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред
- GenerationType.IDENTITY рдЬрдирд░реЗрдЯрд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИред рдпрд╣ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдСрдЯреЛ-рдЗрдВрдХреНрд░реАрдореЗрдВрдЯ рдХреЙрд▓рдо рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рд╣рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдердЧрд┐рдд рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдмреИрдЪрд┐рдВрдЧ рдХрд░рддрд╛ рд╣реИред
- GenerationType.SEQUENCE рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрдм рд╣рдо рдЕрдиреБрдХреНрд░рдо рд╕реЗ рдЖрдИрдбреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
- GenerationType.TABLE - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рдореЗрдВ, рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдирджреЗрди рдФрд░ рд▓реЙрдХ рдкреНрд░рддрд┐ рд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред
рдЪрд▓реЛ рдЕрдиреБрдХреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред рдСрдкрд░реЗрд╢рди рдХреА рдЧрддрд┐ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдХреВрд▓рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЙрди рд╕рднреА рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреА рд╕рдВрдЦреНрдпрд╛ (рдЧреЛрд▓-рдпрд╛рддреНрд░рд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛) рдХреЛ рдХрдо рдХрд░рдирд╛ рд╣реИред рдЖрдЗрдП рдЙрдиреНрд╣реЗрдВ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рджреЗрдЦреЗрдВ:
- рдХреЛрдИ рдирд╣реАрдВ - рдХреЛрдИ рдЕрдиреБрдХреВрд▓рди рдирд╣реАрдВред рдкреНрд░рддреНрдпреЗрдХ рдЖрдИрдбреА рдХреЗ рд▓рд┐рдП рд╣рдо рдЕрдиреБрдХреНрд░рдо рдХреЛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВред
- рдкреВрд▓ рдХрд┐рдП рдЧрдП рдФрд░ рдкреВрд▓ рдХрд┐рдП рдЧрдП рд▓реЛ - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрдВрддрд░рд╛рд▓ - рдПрди рд╕реЗ рдмрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдП (SequenceGenerator.allocationSize)ред рдФрд░ рдЖрд╡реЗрджрди рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреВрд▓ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рдмрд┐рдирд╛ рдирдИ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ..
- hilo - рдПрдХ рдЖрдИрдбреА рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, hilo рдПрд▓реНрдЧреЛрд░рд┐рджрдо 2 рдирдВрдмрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ: hi (рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд - рдЕрдиреБрдХреНрд░рдо рдХреЙрд▓ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп) рдФрд░ lo (рдХреЗрд╡рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд - SequenceGenerator.allocationSize)ред рдЗрди рдирдВрдмрд░реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрдИрдбреА рдмрдирд╛рдиреЗ рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдХреА рдЧрдгрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рддреА рд╣реИ: [(hi - 1) * lo + 1, hi * lo + 1]ред рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдкреБрд░рд╛рдирд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред
рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдХрд╛ рдЪрдпрди рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдореЗрдВ рдХрдИ рдЕрдиреБрдХреНрд░рдо рдЬрдирд░реЗрдЯрд░ рд╣реИрдВред рд╣рдо рдЙрдирдореЗрдВ рд╕реЗ 2 рдореЗрдВ рд░реБрдЪрд┐ рд▓реЗрдВрдЧреЗ:
- SequenceHiLoGenerator рдПрдХ рдкреБрд░рд╛рдирд╛ рдЬрдирд░реЗрдЯрд░ рд╣реИ рдЬреЛ hilo рдЕрдиреБрдХреВрд▓рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЪрдпрдирд┐рдд рд╣реЛрдиреЗ рдкрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ hibernate.id.new_generator_mappings == рдЭреВрдареА рд╕рдВрдкрддреНрддрд┐ рд╣реИред
- SequenceStyleGenerator - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрджрд┐ hibernate.id.new_generator_mappings == рд╕рддреНрдп рдЧреБрдг)ред рдпрд╣ рдЬрдирд░реЗрдЯрд░ рдХрдИ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЛ рдкреВрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЖрдк рдЬрдирд░реЗрдЯрд░ рдПрдиреЛрдЯреЗрд╢рди @GenericGenerator рдХреЛ рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЧрддрд┐рд░реЛрдз
рдЖрдЗрдП рдПрдХ рдЫрджреНрдо рдХреЛрдб рд╕реНрдерд┐рддрд┐ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ рдЬреЛ рдЧрддрд┐рд░реЛрдз рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
Thread #1: update entity(id = 3) update entity(id = 2) update entity(id = 1) Thread #2: update entity(id = 1) update entity(id = 2) update entity(id = 3)
рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдореЗрдВ рдПрдХ рддрдВрддреНрд░ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЧрддрд┐рд░реЛрдзреЛрдВ рд╕реЗ рдмрдЪрддрд╛ рд╣реИ - рд╣рд╛рдЗрдмрд░рдиреЗрдЯ.рдСрд░реНрдбрд░_рдЕрдкрдбреЗрдЯреНрд╕ рдкреИрд░рд╛рдореАрдЯрд░ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рднреА рдЕрдкрдбреЗрдЯ рдЖрдИрдбреА рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рджреНрд╡рд╛рд░рд╛ рдЖрджреЗрд╢ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдореИрдВ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдкрдХрдбрд╝рдиреЗ рдФрд░ рдЗрдиреНрд╕рд░реНрдЯ-рдПрд╕ рдФрд░ рдЕрдкрдбреЗрдЯ-рдПрд╕ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ "рджреЗрд░реА" рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред
рд╕реЗрдЯ, рдмреИрдЧ, рд╕реВрдЪреА
OneToMany рд╕рдВрдЪрд╛рд░ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХреЗ 3 рдореБрдЦреНрдп рддрд░реАрдХреЗ рд╣реИрдВред
- рд╕реЗрдЯ - рджреЛрд╣рд░рд╛рд╡ рдХреЗ рдмрд┐рдирд╛ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХрд╛ рдПрдХ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд╕реЗрдЯ;
- рдмреИрдЧ - рд╕рдВрд╕реНрдерд╛рдУрдВ рдХрд╛ рдПрдХ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд╕реЗрдЯ;
- рд╕реВрдЪреА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХрд╛ рдПрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рдореВрд╣ рд╣реИред
рдЬрд╛рд╡рд╛ рдХреЛрд░ рдореЗрдВ рдмреИрдЧ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд░реНрдЧ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рд╕рднреА рд╕реВрдЪреА рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдмреИрдЧ рд╣реИрдВ рдЬрдм рддрдХ рдЖрдк рдПрдХ рдХреЙрд▓рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣рдорд╛рд░реЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдСрд░реНрдбрд░рдХреЙрд▓реНрдпреВрдореЗрдВрдЯ рдПрдиреЛрдЯреЗрд╢рдиред рд╕реЙрд░реНрдЯрдмреА рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рд╣реЛрдиреЗ рдХреА рдирд╣реАрдВ)ред рдореИрдВ рдЦрд░рд╛рдм (рдореЗрд░реА рд░рд╛рдп рдореЗрдВ) рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдХрд╛рд░рдг рдСрд░реНрдбрд░рдХреЙрд▓реНрдпреВрдореЗрдВрдЯ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ - рдЗрд╖реНрдЯрддрдо рдПрд╕рдХреНрдпреВрдПрд▓ рдкреНрд░рд╢реНрди рдирд╣реАрдВ, рд╢реАрдЯ рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рдирд▓ред
рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмреИрдЧ рдпрд╛ рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ? рдПрдХ рдереИрд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рд╕рдВрднрд╡ рд╣реИ:
- рдпрджрд┐ рдЖрдкрдХреЗ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг 5.0.8 рд╕реЗ рдХрдо рд╣реИ, рддреЛ рдПрдХ рдЧрдВрднреАрд░ рдмрдЧ рд╣реИ - HHH-5855 - рдЬрдм рдПрдХ рдмрд╛рд▓ рдЗрдХрд╛рдИ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рджреЛрд╣рд░рд╛рд╡ рд╕рдВрднрд╡ рд╣реИ (рдХреИрд╕реНрдХреЗрдбрд╛рдЗрдк рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ = MERGE рдФрд░ PERSIST);
- рдпрджрд┐ рдЖрдк ManyToMany рд╕рдВрдмрдВрдз рдХреЗ рд▓рд┐рдП рдмреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдХрд┐рд╕реА рдЗрдХрд╛рдИ рдХреЛ рд╣рдЯрд╛рддреЗ рд╕рдордп рдмреЗрд╣рдж рдЕрдиреБрдЪрд┐рдд рдкреНрд░рд╢реНрди рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рдкрд╣рд▓реЗ рд╕рдореНрдорд┐рд▓рд┐рдд рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рд╕рднреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ;
- рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ рд╣реА рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рдХрдИ рдмреИрдЧ рдирд╣реАрдВ рд▓рд╛ рд╕рдХрддрд╛ рд╣реИред
рдорд╛рдорд▓реЗ рдореЗрдВ рдЬрдм рдЖрдк @OneToMany рдХрдиреЗрдХреНрд╢рди рдореЗрдВ рдПрдХ рдФрд░ рдЗрдХрд╛рдИ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдмреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд▓рд╛рднрджрд╛рдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ:
рд╢рдХреНрддрд┐ рд╕рдВрджрд░реНрдн
рд╕рдВрджрд░реНрдн рдПрдХ рд╡рд╕реНрддреБ рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рд╕реНрдердЧрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдерд╛ред ManyToOne рдХреЗ fetchType = LAZY рдХреЗ рд╕рд╛рде рд╕рдВрдмрдВрдз рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдРрд╕рд╛ рд╕рдВрджрд░реНрдн рдорд┐рд▓рддрд╛ рд╣реИред рдЖрдИрдбреА рдХреЗ рдЕрдкрд╡рд╛рдж (рдЬрдм рд╕реЗ рд╣рдо рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ) рдХреЗ рд╕рд╛рде, рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЖрд░рдореНрдн рдореЗрдВ рдЗрдХрд╛рдИ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд╕рдордп рд╣реЛрддрд╛ рд╣реИред
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЖрд▓рд╕реА рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдВрджрд░реНрдн рд╣рдореЗрд╢рд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдореМрдЬреВрджрд╛ рдкрдВрдХреНрддрд┐ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, рдЕрдзрд┐рдХрд╛рдВрд╢ рдЖрд▓рд╕реА рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рдорд╛рдорд▓реЗ OneToOne рд╕рдВрдмрдВрдзреЛрдВ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ - рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП JOIN рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдХрдиреЗрдХреНрд╢рди рдореМрдЬреВрдж рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ JOIN рдерд╛, рддреЛ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдЗрд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рдореЗрдВ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рд╣рдо OneToOne рдореЗрдВ nullable = true рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ LazyLoad рдХреЛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╣рдо em.getReference рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╕рдВрджрд░реНрдн рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдЪ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рдВрджрд░реНрдн рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдореМрдЬреВрджрд╛ рдкрдВрдХреНрддрд┐ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЖрдЗрдП рдРрд╕реЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдВ:
рдмрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдмрдВрдж рдИрдПрдо рдпрд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдПрдХ LazyInitializationException рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред
рддрд╛рд░реАрдЦ рдФрд░ рд╕рдордп
рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ java 8 рдореЗрдВ рджрд┐рдирд╛рдВрдХ рдФрд░ рд╕рдордп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ API рд╣реИ, JDBC API рдЕрднреА рднреА рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдкреБрд░рд╛рдиреЗ рджрд┐рдирд╛рдВрдХ API рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ LocalDateTime рдФрд░ Instant рдФрд░ ZonedDateTime рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░реЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред (рдореИрдВ рдЦрд┐рдВрдЪрд╛рд╡ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЙрддреНрдХреГрд╖реНрдЯ рд▓реЗрдЦ рджреВрдВрдЧрд╛:
рдкрд╣рд▓рд╛ рдФрд░
рджреВрд╕рд░рд╛ )
рдЕрдЧрд░ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВLocalDateTime рдФрд░ LocalDate рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдПрдХ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдордп рд╕реЗ рдмрдВрдзреЗ рдирд╣реАрдВ рд╣реИрдВред рдпрд╛рдиреА рд╣рд╡рд╛рдИ рдЬрд╣рд╛рдЬ рдХреЗ рд▓реИрдВрдбрд┐рдВрдЧ рдХрд╛ рд╕рдордп LocalDateTime рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ LocalDate рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрдиреНрдо рдХреА рддрд╛рд░реАрдЦ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рд╣реИред рдЭрдЯрдкрдЯ рд╕рдордп рдореЗрдВ рдПрдХ рдмрд┐рдВрджреБ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╣рдо рдЧреНрд░рд╣ рдкрд░ рдХрд┐рд╕реА рднреА рд╕рдордп рд╕реНрдерд╛рдиреАрдп рд╕рдордп рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рддрд┐рдерд┐рдпрд╛рдВ рдХреИрд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИрдВред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЯрд╛рдЗрдорд╕реНрдЯреЛрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде TIMESTAMP рдЪрд┐рдкрдХрд╛ рд╣реБрдЖ рд╣реИ, рддреЛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрджрд┐ TIMESTAMP (TIMEZONE рдХреЗ рдмрд┐рдирд╛) рдЦрдбрд╝рд╛ рд╣реИ, рддреЛ рдПрдХ рдореМрдХрд╛ рд╣реИ рдХрд┐ рддрд┐рдерд┐ рдЧрд▓рдд рд▓рд┐рдЦреА / рдкрдврд╝реА рдЬрд╛рдПрдЧреАред (рд▓реЛрдХрд▓рдбреЗрдЯ рдФрд░ рд▓реЛрдХрд▓рдбреЗрдЯ рдХреЛ рдЫреЛрдбрд╝рдХрд░)
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХреНрдпреЛрдВ:
рдЬрдм рд╣рдо рджрд┐рдирд╛рдВрдХ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ, рддреЛ рдирд┐рдореНрди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╡рд╛рд▓реА рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
setTimestamp(int i, Timestamp t, java.util.Calendar cal)
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рдкреБрд░рд╛рдиреЗ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреИрд▓реЗрдВрдбрд░ рддрд░реНрдХ рдХреЛ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрд╛рдиреА рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдЯрд╛рдЗрдордЬреЛрди рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдХреИрд▓реЗрдВрдбрд░ рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреИрд▓реЗрдВрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ JVM рдЯрд╛рдЗрдордЬрд╝реЛрди рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ 3 рддрд░реАрдХреЗ рд╣реИрдВ:
- рд╡рд╛рдВрдЫрд┐рдд рд╕рдордпрдХреНрд╖реЗрддреНрд░ JVM рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ
- рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ - hibernate.jdbc.time_zone (5.2 рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛) - рдХреЗрд╡рд▓ ZonedDateTime рдФрд░ OffsetDateTime рдХреЛ рдареАрдХ рдХрд░реЗрдЧрд╛
- TIMEZONE рдХреЗ рд╕рд╛рде TIMESTAMP рдЯрд╛рдЗрдк рдХрд░реЗрдВ
рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕рд╡рд╛рд▓ рд╣реИ, рд▓реЛрдХрд▓рдбреЗрдЯ рдФрд░ рд▓реЛрдХрд▓рдбреЗрдЯрдЯрд╛рдЗрдо рдРрд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЖрддреЗ?
рдЬрд╡рд╛рдм рд╣реИрдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ java.util.Date class (java.sql.Date and java.sql.Timestamp) рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рдордЭрдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕рдХреЗ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрдирдХреЗ рдорддрднреЗрдж рд╣рдореЗрдВ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ)ред рддрд╛рд░реАрдЦ 1970 рд╕реЗ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдореЗрдВ рддрд╛рд░реАрдЦ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреА рд╣реИ, рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдпреВрдЯреАрд╕реА рдореЗрдВ рдмреЛрд▓рддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдЯреНрд░реАрдЯрд┐рдВрдЧ рд╡рд┐рдзрд┐ рд╕рд┐рд╕реНрдЯрдо рдЯрд╛рдЗрдордЬрд╝реЛрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рддрд╛рд░реАрдЦ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреА рд╣реИред
рддрджрдиреБрд╕рд╛рд░, рдЬрдм рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЯрд╛рдЗрдордЬрд╝реЛрди рдХреЗ рдмрд┐рдирд╛ рдПрдХ рддрд╛рд░реАрдЦ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдореИрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕реНрдЯреНрд░реАрд╕реНрдЯрд┐рдВрдЧ рд╡рд┐рдзрд┐ рдЕрдкрдирд╛ рд╡рд╛рдВрдЫрд┐рдд рдореВрд▓реНрдп рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗред рдЙрд╕реА рд╕рдордп, 1970 рд╕реЗ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИ (рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░)ред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рд╕реНрдерд╛рдиреАрдп рд╕рдордп рд╣рдореЗрд╢рд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред
рдореИрдВ TimesDam рдХреЛ LocalDateTime рдФрд░ Instant рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдХреЛрдб рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реВрдВ:
рдмреИрдЪрд┐рдВрдЧ
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдХреНрд╡реЗрд░реАрдЬрд╝ рдХреЛ рдПрдХ рд╕рдордп рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдмреИрдЪрд┐рдВрдЧ рд╕рдХреНрд╖рдо рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдХреНрд╡реЗрд░реА рдореЗрдВ рдХрдИ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рднреЗрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред (рдпрд╛рдиреА рдмреИрдЪрд┐рдВрдЧ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдЧреЛрд▓ рдпрд╛рддреНрд░рд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИ)
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП:
- рдмреИрдЪрд┐рдВрдЧ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ рдФрд░ рдЕрдзрд┐рдХрддрдо рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╕реЗрдЯ рдХрд░реЗрдВ:
hibernate.jdbc.batch_size (5 рд╕реЗ 30 рдЕрдиреБрд╢рдВрд╕рд┐рдд) - рдЗрдиреНрд╕рд░реНрдЯ рдФрд░ рдЕрдкрдбреЗрдЯ рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ:
hibernate.order_inserts
hibernate.order_updates
- рдпрджрд┐ рд╣рдо рд╡рд░реНрдЬрдирд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
hibernate.jdbc.batch_versioned_data - рдпрд╣рд╛рдВ рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ, рдЖрдкрдХреЛ рдЕрдкрдбреЗрдЯ рдХреЗ рджреМрд░рд╛рди рдкреНрд░рднрд╛рд╡рд┐рдд рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рджреЗрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП jdbc рдбреНрд░рд╛рдЗрд╡рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдореИрдВ рдЖрдкрдХреЛ em.clear () рдСрдкрд░реЗрд╢рди рдХреА рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдпрд╛рдж рджрд┐рд▓рд╛рдКрдВрдЧрд╛ - рдпрд╣ рдЗрдо рд╕реЗ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдореЗрдореЛрд░реА рдЦрд╛рд▓реА рд╣реЛ рдЬрд╛рддреА рд╣реИ рдФрд░ рдЧрдВрджреЗ рдЪреЗрдХрд┐рдВрдЧ рдСрдкрд░реЗрд╢рди рдХрд╛ рд╕рдордп рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдпрджрд┐ рд╣рдо рдкреЛрд╕реНрдЯрдЧреНрд░реИрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо
рдорд▓реНрдЯреА-рдХрдЪреНрдЪреЗ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рднреА рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред
рдПрди + 1 рд╕рдорд╕реНрдпрд╛
рдпрд╣ рдПрдХ рд╕реБрдВрджрд░ рд╕рд░реНрд╡рд╡реНрдпрд╛рдкреА рд╡рд┐рд╖рдп рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрд▓реНрджреА рд╕реЗ рдЗрд╕ рдкрд░ рдЬрд╛рдПрдВред
N + 1 рд╕рдорд╕реНрдпрд╛ рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рд╣реИ, рдЬрд╣рд╛рдБ N рдкреБрд╕реНрддрдХреЛрдВ рдХреЗ рдЪрдпрди рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХрд▓ рдЕрдиреБрд░реЛрдз рдХреЗ рдмрдЬрд╛рдп, рдХрдо рд╕реЗ рдХрдо N + 1 рдЕрдиреБрд░реЛрдз рд╣реЛрддреЗ рд╣реИрдВред
N + 1 рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╕рдВрдмрдВрдзрд┐рдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рд▓рд╛рдирд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдХрдИ рдЕрдиреНрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
- рдкреГрд╖реНрдард╛рдВрдХрдиред OneToMany рд░рд┐рд╢реНрддреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдСрдлрд╕реЗрдЯ рдФрд░ рд╕реАрдорд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдЗрди-рдореЗрдореЛрд░реА рдореЗрдВ рдкреЗрдЬрд┐рдиреЗрд╢рди рд╣реЛрдЧрд╛ред
- рдХрд╛рд░реНрдЯреЗрд╢рд┐рдпрди рдЙрддреНрдкрд╛рдж рдХреА рд╕рдорд╕реНрдпрд╛ рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рд╣реИ рдЬрдм рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдПрди * рдПрдо * рдХреЗ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдПрдо рдЕрдзреНрдпрд╛рдп рдФрд░ рдХреЗ рд▓реЗрдЦрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрди рдХрд┐рддрд╛рдмреЗрдВ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрддрд╛ рд╣реИред
рдПрди + 1 рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдЕрдиреНрдп рддрд░реАрдХреЗ рд╣реИрдВред
- FetchMode - рдЖрдкрдХреЛ рдмрд╛рд▓ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд▓реЛрдбрд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ:
- FetchType.SUBSELECT - рдПрдХ рдЕрд▓рдЧ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдмрд╛рд▓рдХ рд░рд┐рдХреЙрд░реНрдбреНрд╕ред рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЦреНрдп рдЕрдиреБрд░реЛрдз рдХреА рд╕рднреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ subselect рдореЗрдВ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- BATCH (FetchType.SELECT + BatchSize annotation) - рдПрдХ рдЕрд▓рдЧ рдЕрдиреБрд░реЛрдз рдХреЗ рд░реВрдк рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рднреА рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рде рдореЗрдВ рд╕рдмрдХреНрд╡рд┐рд░реА рдХреЗ рд╕рд╛рде рдпрд╣ рдкреИрд░реЗрдВрдЯ_рдб рдЗрди (?;?;, ..., ..., N) рдЬреИрд╕реА рд╕реНрдерд┐рддрд┐ рдмрдирд╛рддрд╛ рд╣реИред
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЬрдм рдХреНрд░рд╛рдЗрдЯреЗрд░рд┐рдпрд╛ рдПрдкреАрдЖрдИ рдореЗрдВ рднреНрд░реВрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ FetType рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - JOIN рд╣рдореЗрд╢рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - JPA EntityGraph рдФрд░ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ FetchProfile - рдЖрдкрдХреЛ рдЗрдХрд╛рдИ рд▓реЛрдбрд┐рдВрдЧ рдирд┐рдпрдореЛрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдЕрдореВрд░реНрдд рдореЗрдВ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ - рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рджреЛрдиреЛрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИрдВред
рдкрд░реАрдХреНрд╖рдг
рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рд╡рд┐рдХрд╛рд╕ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрдерд╛рд╕рдВрднрд╡ рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдЕрд░реНрдерд╛рддреН:
- рд▓реЙрдЧрд┐рдВрдЧ
- org.hibernate.SQL: рдбреАрдмрдЧ
- org.hibernate.type.descriptor.sql: рдЯреНрд░реЗрд╕
- рдЖрдВрдХрдбрд╝реЗ
- hibernate.generate_statistics
рдЙрдкрдпреЛрдЧреА рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- DBUnit - рдЖрдкрдХреЛ XML рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдХрднреА-рдХрднреА рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд▓реЗрдХрд┐рди рдмреЗрд╣рддрд░ рдлрд┐рд░ рд╕реЗ рд╕реЛрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
- рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд-рдкреНрд░реЙрдХреНрд╕реА
- p6spy рд╕рдмрд╕реЗ рдкреБрд░рд╛рдиреЗ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЙрдиреНрдирдд рдХреНрд╡реЗрд░реА рд▓реЙрдЧрд┐рдВрдЧ, рд░рдирдЯрд╛рдЗрдо рдЖрджрд┐ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
- com.vladmihalcea: db-use: 0.0.1 рдПрди + 1 рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдХреНрд╡реЗрд░реА рд▓реЙрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рднреА рджреЗрддрд╛ рд╣реИред рд░рдЪрдирд╛ рдореЗрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд░реАрдЯреНрд░реА рдПрдиреЛрдЯреЗрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рдХрд┐ рдПрдХ OptimisticLockException рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд▓реЗрди-рджреЗрди рдХреЛ рдкреБрди: рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред
- рд╕реВрдБрдШрдирд╛ - рдЖрдк рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдПрдХ рдЬреЛрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдХреБрдЫ рдорд╛рдпрдиреЛрдВ рдореЗрдВ, рд╡реНрд▓рд╛рджрд┐рдореАрд░ рд╕реЗ рдирд┐рд░реНрдгрдп рд╕реЗ рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдгред
рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдореИрдВ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЗрд╕реЗ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕рд╛рд╣рд┐рддреНрдп