рдЬреЗрдкреАрдП рдореЗрдВ рдЕрджреНрднреБрдд рд╕рдВрд╕реНрдХрд░рдг рдПрдиреЛрдЯреЗрд╢рди

рдкрд░рд┐рдЪрдп


рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИ! рдЬреЗрдкреАрдП рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ?

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╡рд╣ рдЬреЗрдкреАрдП рдореЗрдВ рдЕрд╡рд░реЛрдз рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдпрд╣ рдПрдиреЛрдЯреЗрд╢рди рдЙрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рд▓реЗрдирджреЗрди рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИрдВред

рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ?


  1. рд▓реЙрд╕реНрдЯ рдЕрдкрдбреЗрдЯ рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рджреЛ рд▓реЗрдирджреЗрди рд╕рдорд╛рди рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
  2. рдЧрдВрджрд╛ рд░реАрдб рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ рд▓реЗрди-рджреЗрди рдЙрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ рдЬреЛ рдЕрднреА рддрдХ рдХрд┐рд╕реА рдЕрдиреНрдп рд▓реЗрдирджреЗрди рджреНрд╡рд╛рд░рд╛ рд╕рд╣реЗрдЬреЗ рдирд╣реАрдВ рдЧрдП рд╣реИрдВред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рджреВрд╕рд░реЗ рд▓реЗрдирджреЗрди рдХреЗ рд░реЛрд▓рдмреИрдХ рдХреЗ рдХрд╛рд░рдг рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдбреЗрдЯрд╛ рдкрд╣рд▓реЗ рд╣реА рдкрдврд╝рд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред
  3. рдЧреИрд░-рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд░реАрдбрд┐рдВрдЧ рддрдм рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдкрд╣рд▓рд╛ рд▓реЗрдирджреЗрди рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реЗ рд▓реЗрдирджреЗрди рдиреЗ рдЙрдирдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд▓реЗрдирджреЗрди рдХреЗ рдЕрдВрдд рддрдХ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рддрд┐рдмрджреНрдз рдХрд┐рдпрд╛ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЬрдм рдПрдХ рд╣реА рд▓реЗрди-рджреЗрди рдХреЗ рднреАрддрд░ рдПрдХ рд╣реА рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреВрд░реА рддрд╛рд▓рд┐рдХрд╛, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред
  4. рдлреИрдВрдЯрдо рд░реАрдбрд┐рдВрдЧ рд░реАрдбрд┐рдВрдЧ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд╕рдорд╛рди рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдЗрд╕ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдХрд┐ рдПрдХ рдЕрд▓рдЧ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд▓рд╛рдЗрдиреЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддреА рд╣реИрдВред

рдЙрдирдХреЗ рдлреИрд╕рд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ


  1. READ UNCOMMITED - JPA рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ (рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд▓реЗрдЦ рд╣реИ)
  2. рдкрдврд╝реЗрдВ рдЯрд┐рдкреНрдкрдгреА - рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
  3. рдкреБрдирд░рд╛рд╡рд░реНрддреА рдкрдврд╝реЗрдВ - рдпрд╣рд╛рдВ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред рд╣рдорд╛рд░рд╛ рд▓реЗрдирджреЗрди "рдЙрд╕ рдбреЗрдЯрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рджреЗрдЦрддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рдкрдврд╝рд╛ рдерд╛, рдФрд░ рдЕрдиреНрдп рд▓реЗрдирджреЗрди рд╣рдорд╛рд░реЗ рд▓реЗрдирджреЗрди рдореЗрдВ рдЧрд┐рд░реЗ рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВред"
  4. рдЕрдиреБрдХреНрд░рдорд┐рдХ - рдЕрдиреБрдХреНрд░рдорд┐рдХ рд▓реЗрдирджреЗрди рдирд┐рд╖реНрдкрд╛рджрди

рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдж рдХрд╛ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдкрд┐рдЫрд▓реЗ рд╕рднреА рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ, рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрд╣ рдкрд╣рд▓реЗ рдмрддрд╛рдП рдЧрдП рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, SERIALIZABLE рдореЗрдВ рдЙрдЪреНрдЪрддрдо рдЕрд▓рдЧрд╛рд╡ рд╕реНрддрд░ рд╣реИ, рдФрд░ READ UNCOMMITED рдореЗрдВ рд╕рдмрд╕реЗ рдХрдо рд╣реИред

рд╕рдВрд╕реНрдХрд░рдг


рд╕рдВрд╕реНрдХрд░рдг рдЦреЛ рдЕрджреНрдпрддрди рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░рддреА рд╣реИред рдХреИрд╕реЗ рдареАрдХ рд╣реИ, рдЕрдм рд╣рдо рджреЗрдЦреЗрдВрдЧреЗред

рдХреЛрдб рдкрд░ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд╛рд▓реЗ рд╣реИрдВ: рдЖрд╢рд╛рд╡рд╛рджреА рдФрд░ рдирд┐рд░рд╛рд╢рд╛рд╡рд╛рджреА ред рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдкреВрд░реНрд╡ рдХреЛ рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдИ рд▓реЗрдирджреЗрди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдмрд╣реБрдд рдХрдо рд╣реА рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдЕрдиреНрдп рд╡рд┐рдкрд░реАрдд рд╕реНрдерд┐рддрд┐ рд╕реЗ рдирд┐рд░реНрджреЗрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЙрдирдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рддрд░реНрдХ рдореЗрдВ рдЕрдВрддрд░ рд╣реИред

рдЖрд╢рд╛рд╡рд╛рджреА рддрд╛рд▓реЛрдВ рдореЗрдВ, рдЬрдм рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЙрд╕ рд╕рдордп рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдлрд╝реАрд▓реНрдб рдХреЗ рдореВрд▓реНрдп рдХреА рддреБрд▓рдирд╛ рдЙрд╕ рд╕рдордп рдХреА рдЬрд╛рддреА рд╣реИ рдЬрдм рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВред рдпрджрд┐ рдпрд╣ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН, рдХреБрдЫ рдЕрдиреНрдп рд▓реЗрдирджреЗрди рд╣рдорд╛рд░реЗ рдЖрдЧреЗ рд╣реИрдВ рдФрд░ рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ, рддреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдорд╛рд░рд╛ рд▓реЗрдирджреЗрди рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдЗрд╕реЗ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЖрд╢рд╛рд╡рд╛рджреА рддрд╛рд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╕рдордп рдПрдХ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреА рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреЛ рдЙрди рд▓реЗрди-рджреЗрди рдХреЛ рджреЛрд╣рд░рд╛рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рджреВрд╕рд░реЛрдВ рдХреЗ рд╕рд╛рдордиреЗ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рдерд╛ред

рдирд┐рд░рд╛рд╢рд╛рд╡рд╛рджреА рд▓реЛрдЧреЛрдВ рдореЗрдВ , рд╕рднреА рд▓рд╛рдЗрдиреЛрдВ рдкрд░ рдХрдерд┐рдд рдбреЗрдЯрд╛ рд╕рдВрд╢реЛрдзрди рд╕реЗ рддреБрд░рдВрдд рдкрд╣рд▓реЗ рддрд╛рд▓рд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдВрд╢реЛрдзрди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред

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

LockModeType рдпрд╛ рд▓реЙрдХ рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВ


EntityManager рдХреЗ рд▓реБрдХ рдореЗрдердб рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рд▓реЙрдХ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

entityManager.lock(myObject, LockModeType.OPTIMISTIC); 

LockModeType рдПрдХ рд▓реЙрдХрд┐рдВрдЧ рд░рдгрдиреАрддрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред

LockModeType 6 рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рдЬрд┐рдирдореЗрдВ рд╕реЗ 2 рдЖрд╢рд╛рд╡рд╛рджреА рд╣реИрдВ , рдФрд░ 3 рдирд┐рд░рд╛рд╢рд╛рд╡рд╛рджреА рд╣реИрдВ ):

  1. рдХреЛрдИ рдирд╣реАрдВ - рдХреЛрдИ рддрд╛рд▓рд╛ рдирд╣реАрдВ
  2. рдЖрд╢рд╛рд╡рд╛рджреА
  3. OPTIMISTIC_FORCE_INCREMENT
  4. PESSIMISTIC_READ
  5. PESSIMISTIC_WRITE
  6. PESSIMISTIC_FORCE_INCREMENT

рд╣рдорд╛рд░реА рдЗрдХрд╛рдИ рдмрдирд╛рдПрдБ
 import lombok.Getter; import lombok.Setter; import javax.persistence.*; @EntityListeners(OperationListenerForMyEntity.class) @Entity public class MyEntity{ @Version private long version; @Id @GeneratedValue @Getter @Setter private Integer id; @Getter @Setter private String value; @Override public String toString() { return "MyEntity{" + "id=" + id + ", version=" + version + ", value='" + value + '\'' + '}'; } } 


рдЖрдЗрдП рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВ рдЬрд╣рд╛рдВ рд╕рднреА рдХреЙрд▓рдмреИрдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
 import javax.persistence.*; public class OperationListenerForMyEntity { @PostLoad public void postLoad(MyEntity obj) { System.out.println("Loaded operation: " + obj); } @PrePersist public void prePersist(MyEntity obj) { System.out.println("Pre-Persistiting operation: " + obj); } @PostPersist public void postPersist(MyEntity obj) { System.out.println("Post-Persist operation: " + obj); } @PreRemove public void preRemove(MyEntity obj) { System.out.println("Pre-Removing operation: " + obj); } @PostRemove public void postRemove(MyEntity obj) { System.out.println("Post-Remove operation: " + obj); } @PreUpdate public void preUpdate(MyEntity obj) { System.out.println("Pre-Updating operation: " + obj); } @PostUpdate public void postUpdate(MyEntity obj) { System.out.println("Post-Update operation: " + obj); } } 


Main.java
 import javax.persistence.*; import java.util.concurrent.*; //        ,   . public class Main { //  , ..  EntityManagerFactory  ,     . private static EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("ru.easyjava.data.jpa.hibernate"); public static void main(String[] args) { //  10 (  ,       ). ExecutorService es = Executors.newFixedThreadPool(10); try { //  persistFill()   - . persistFill(); for(int i=0; i<10; i++){ int finalI = i; es.execute(() -> { //      updateEntity(finalI) ,  java       .    java -  ,      id,       , id    ,       (  ,      persistFill(),  id       500). updateEntity(finalI); }); } es.shutdown(); try { es.awaitTermination(10, TimeUnit.SECONDS); } catch (InterruptedException e) { e.printStackTrace(); } } finally { entityManagerFactory.close(); } } //         . private static void updateEntity(int index) { //  EntityManager  ,     ,    . EntityManager em = entityManagerFactory.createEntityManager(); MyEntity myEntity = null; try { em.getTransaction().begin(); //        1. myEntity = em.find(MyEntity.class, 1); //   sout,       "" . System.out.println("load = "+index); //       (  LockModeType.*). em.lock(myEntity, LockModeType.OPTIMISTIC); //   Value,  ,        . myEntity.setValue("WoW_" + index); em.getTransaction().commit(); em.close(); System.out.println("--Greeter updated : " + myEntity +" __--__ "+ index); }catch(RollbackException ex){ System.out.println(", =" + myEntity); } } public static void persistFill() { MyEntity myEntity = new MyEntity(); myEntity.setValue("JPA"); EntityManager em = entityManagerFactory.createEntityManager(); em.getTransaction().begin(); em.persist(myEntity); em.getTransaction().commit(); em.close(); } } 


рдЯрд┐рдкреНрдкрдгреА рдЕрджреНрдпрддрди рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдкрд╣рд▓реА рдмрд╛рд░ рдЪрд▓рд╛рдПрдБ
 Pre-Persistiting operation: MyEntity{id=null, version=0, value='JPA'} Post-Persist operation: MyEntity{id=531, version=0, value='JPA'}  .  id   find   . 


LockModeType.OPTIMISTIC

рдпрд╣ рдПрдХ рдЖрд╢рд╛рд╡рд╛рджреА рдмреНрд▓реЙрдХ рд╣реИ, рдареАрдХ рд╣реИ, рдпрд╣ рдмрд╣реБрдд рддрд╛рд░реНрдХрд┐рдХ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рд▓рд┐рдЦрд╛ рдерд╛, рд╕рдВрд╕реНрдХрд░рдг рдлрд╝реАрд▓реНрдб рдХреЗ рдореВрд▓реНрдп рдХреА рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ; рдЕрдЧрд░ рдпрд╣ рдЕрд▓рдЧ рд╣реИ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХ рджреА рдЬрд╛рддреА рд╣реИред рдЗрд╕реЗ рджреЗрдЦреЗрдВред

рдкрд░рд┐рдгрд╛рдо:
 Loaded operation: MyEntity{id=531, version=0, value='JPA'} load = 3 Loaded operation: MyEntity{id=531, version=0, value='JPA'} load = 2 Pre-Updating operation: MyEntity{id=531, version=0, value='WoW_2'} Pre-Updating operation: MyEntity{id=531, version=0, value='WoW_3'} Loaded operation: MyEntity{id=531, version=0, value='JPA'} load = 9 Pre-Updating operation: MyEntity{id=531, version=0, value='WoW_9'} Loaded operation: MyEntity{id=531, version=0, value='JPA'} load = 1 Pre-Updating operation: MyEntity{id=531, version=0, value='WoW_1'} Post-Update operation: MyEntity{id=531, version=1, value='WoW_1'} --Greeter updated : MyEntity{id=531, version=1, value='WoW_1'} __--__ 1 , =MyEntity{id=531, version=0, value='WoW_2'} , =MyEntity{id=531, version=0, value='WoW_3'} Loaded operation: MyEntity{id=531, version=1, value='WoW_1'} load = 4 Pre-Updating operation: MyEntity{id=531, version=1, value='WoW_4'} Post-Update operation: MyEntity{id=531, version=2, value='WoW_4'} --Greeter updated : MyEntity{id=531, version=2, value='WoW_4'} __--__ 4 , =MyEntity{id=531, version=0, value='WoW_9'} Loaded operation: MyEntity{id=531, version=2, value='WoW_4'} load = 0 Pre-Updating operation: MyEntity{id=531, version=2, value='WoW_0'} Post-Update operation: MyEntity{id=531, version=3, value='WoW_0'} --Greeter updated : MyEntity{id=531, version=3, value='WoW_0'} __--__ 0 Loaded operation: MyEntity{id=531, version=3, value='WoW_0'} load = 6 Pre-Updating operation: MyEntity{id=531, version=3, value='WoW_6'} Post-Update operation: MyEntity{id=531, version=4, value='WoW_6'} Loaded operation: MyEntity{id=531, version=4, value='WoW_6'} load = 5 Pre-Updating operation: MyEntity{id=531, version=4, value='WoW_5'} Post-Update operation: MyEntity{id=531, version=5, value='WoW_5'} --Greeter updated : MyEntity{id=531, version=4, value='WoW_6'} __--__ 6 --Greeter updated : MyEntity{id=531, version=5, value='WoW_5'} __--__ 5 Loaded operation: MyEntity{id=531, version=5, value='WoW_5'} load = 7 Pre-Updating operation: MyEntity{id=531, version=5, value='WoW_7'} Post-Update operation: MyEntity{id=531, version=6, value='WoW_7'} Loaded operation: MyEntity{id=531, version=5, value='WoW_5'} load = 8 Pre-Updating operation: MyEntity{id=531, version=5, value='WoW_8'} --Greeter updated : MyEntity{id=531, version=6, value='WoW_7'} __--__ 7 , =MyEntity{id=531, version=5, value='WoW_8'} 


рдЕрд╡рд▓реЛрдХрди: рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдзрд╛рд░рд╛ 3, 2, 9, рдФрд░ 1 рдкрд╣рд▓реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЗ, рдФрд░ рдкреНрд░реА-рдЕрдкрдбреЗрдЯ рдХреЙрд▓рдмреИрдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЙрдирдХреЗ рд▓рд┐рдП рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкрд╣рд▓рд╛ рдереНрд░реЗрдб рдЬрд╣рд╛рдВ рдкреЛрд╕реНрдЯ-рдЕрдкрдбреЗрдЯ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рд╡рд╣ 1 рдерд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдВрд╕реНрдХрд░рдг рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдлрд╝реАрд▓реНрдб рдХреЛ рдкрд╣рд▓реЗ рд╣реА рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (1 рд╕реЗ рдмрдврд╝ рдХрд░)ред рддрджрдиреБрд╕рд╛рд░, рд╕рднреА рдмрдЪреЗ рд╣реБрдП рдзрд╛рдЧреЗ 2, 3, 9 рдиреЗ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ред рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдкрд░рд┐рдгрд╛рдо рдореВрд▓реНрдп = WoW_7, рд╕рдВрд╕реНрдХрд░рдг = 6. рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдВрддрд┐рдо рдкреЛрд╕реНрдЯ-рдЕрдкрдбреЗрдЯ рд╕рдВрд╕реНрдХрд░рдг 7 рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг = 6 рдХреЗ рд╕рд╛рде рдерд╛ред

LockModeType.OPTIMISTIC_FORCE_INCREMENT

рдпрд╣ LockModeType.OPTIMISTIC рдХреЗ рд╕рдорд╛рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рд╕рдВрд╕реНрдХрд░рдг рдХреНрд╖реЗрддреНрд░ рдХреЗ рдореВрд▓реНрдп рдХреЗ рдмрд╛рдж рдЬрдмрд░рди 1 рд╕реЗ рдмрдврд╝рд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддрд┐рдмрджреНрдз рдХреЗ рдмрд╛рдж, рдлрд╝реАрд▓реНрдб 2 рд╕реЗ рдмрдврд╝ рдЬрд╛рдПрдЧреА (рд╡реГрджреНрдзрд┐ рдЬреЛ рдкреЛрд╕реНрдЯ-рдЕрдкрдбреЗрдЯ + рдордЬрдмреВрд░ рд╡реГрджреНрдзрд┐ рдореЗрдВ рджреЗрдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИ) ред рдкреНрд░рд╢реНрдиред рдХреНрдпреЛрдВ? рдпрджрд┐ рдПрдХ рдкреНрд░рддрд┐рдмрджреНрдз рдХреЗ рдмрд╛рдж рднреА рд╣рдо рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ "рдХрдВрдЬреНрдпреВрдо" рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдореЗрдВ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рд▓реЗрдирджреЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рдХрдорд┐рдЯ рдФрд░ рд╣рдорд╛рд░реЗ рд▓реЗрдирджреЗрди рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмреАрдЪ рдЯреВрдЯ рд╕рдХрддрд╛ рд╣реИред

рдорд╣рддреНрд╡рдкреВрд░реНрдг! рдпрджрд┐ рдЖрдк рдбреЗрдЯрд╛ рдХреЛ рдЙрд╕реА рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреНрд░реА-рдЕрдкрдбреЗрдЯ рдФрд░ рдкреЛрд╕реНрдЯ-рдЕрдкрдбреЗрдЯ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рднреА рд▓реЗрди-рджреЗрди рдХрд╛ рдкрддрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ рд▓реЗрди-рджреЗрди рдкрдврд╝реЗ рдЬрд╛рддреЗ рдереЗ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдкреНрд░реА рдФрд░ рдкреЛрд╕реНрдЯ (рдЕрдкрдбреЗрдЯ) рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд▓реЗрди-рджреЗрди рдЬреЛ рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ (рдЙрд╕реА рдХреЗ рд▓рд┐рдП) рддреБрд░рдВрдд рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рд╕реЗ рд╢реЗрд╖ рд▓реЗрди-рджреЗрди рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред

LockModeType.PESSIMISTIC_READ, LockModeType.PESSIMISTIC_WRITE рдФрд░ LockModeType.PESSIMISTIC_FORCE_INCREMENT

рдЪреВрдВрдХрд┐ рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд╛рд▓реЛрдВ рдХрд╛ рдХрд╛рдо рд╕рдорд╛рди рджрд┐рдЦрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ рдФрд░ рдХреЗрд╡рд▓ PESSIMISTIC_READ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рдгрд╛рдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред

LockModeType.PESSIMISTIC_READ - рдирд┐рд░рд╛рд╢рд╛рд╡рд╛рджреА рд▓реЙрдХ рдкрдврд╝реЗрдВред
LockModeType.PESSIMISTIC_WRITE - рдирд┐рд░рд╛рд╢рд╛рд╡рд╛рджреА рд▓реЗрдЦрди рддрд╛рд▓рд╛ (рдФрд░ рдкрдврд╝реЗрдВ)ред
LockModeType.PESSIMISTIC_FORCE_INCREMENT - рдирд┐рд░рд╛рд╢рд╛рд╡рд╛рджреА рд▓реЗрдЦрди рд▓реЙрдХ (рдФрд░ рдкрдврд╝реЗрдВ) рд╕рдВрд╕реНрдХрд░рдг рдХреНрд╖реЗрддреНрд░ рдХреА рдордЬрдмреВрд░ рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рдеред

рдЗрд╕ рддрд░рд╣ рдХреЗ рддрд╛рд▓реЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдПрдХ рддрд╛рд▓рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рдВрдмрд╛ рдЗрдВрддрдЬрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред

LockModeType.PESSIMISTIC_READ рдкрд░ рдкрд░рд┐рдгрд╛рдо (рдЗрд╕рдХреА рд╕рдВрдкреВрд░реНрдгрддрд╛ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ):
 load = 0 Pre-Updating operation: MyEntity{id=549, version=5, value='WoW_0'} Post-Update operation: MyEntity{id=549, version=6, value='WoW_0'} Loaded operation: MyEntity{id=549, version=6, value='WoW_0'} load = 8 Pre-Updating operation: MyEntity{id=549, version=6, value='WoW_8'} Loaded operation: MyEntity{id=549, version=6, value='WoW_0'} load = 4 Pre-Updating operation: MyEntity{id=549, version=6, value='WoW_4'} ... ERROR: :   :  22760    ExclusiveLock  " (0,66)  287733   271341";   20876.  20876    ShareLock  " 8812";   22760. 


рдирддреАрдЬрддрди, рдереНрд░реЗрдбреНрд╕ 4 рдФрд░ 8 рдиреЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░ рджрд┐рдпрд╛, рдЬрд┐рд╕рд╕реЗ рдПрдХ рдЕрд╕рд╣рдиреАрдп рд╕рдВрдШрд░реНрд╖ рд╣реБрдЖред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдХрд┐рд╕реА рдиреЗ рдзрд╛рдЧрд╛ 0 рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрдХреНрд╖реЗрдк рдирд╣реАрдВ рдХрд┐рдпрд╛ред рд╕рднреА рдзрд╛рдЧреЗ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐ 0 рддрдХред

Source: https://habr.com/ru/post/hi434836/


All Articles