рд╣рд╛рд▓ рд╣реА рдореЗрдВ, JDBC рдФрд░ ORM рдХреЗ рдмреАрдЪ рдПрдХ рдордзреНрдп рдореИрджрд╛рди
рдХреА рддрд▓рд╛рд╢ рдореЗрдВ , рдореИрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдУрдкрди рд╕реЛрд░реНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (
рдЕрдкрд╛рдЪреЗ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд▓рд╛рдЗрд╕реЗрдВрд╕ ) рдХреЗ рд╕рд╛рде рдЖрдпрд╛, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк SQL рдХреЛрдб рдХреЛ рд╕реАрдзреЗ рдЬрд╛рд╡рд╛ рдХреЛрдб рдореЗрдВ рдХрд╛рдлреА рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ
рдЬреВрдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреВрдХ рдореЗрдВ рдПрдХ рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рд╡рд╛ рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдкрдХреЛ рдЗрд╕ рдХреЛрдб рдЬреИрд╕рд╛ рдХреБрдЫ рдорд┐рд▓рддрд╛ рд╣реИ:
Integer taskId = sqlFactory.select(ID).from(TASK).where(STATUS.equal(TaskStatus.QUEUED)). orderBy(LAST_UPDATED).limit(1).fetchOne(ID);
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдХреНрд╡реЗрд░реА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ рд╕рд░рд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдПрдХ рдкрдВрдХреНрддрд┐ рд▓реЗрддрд╛ рд╣реИред Jooq рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛:
рд╣рдорд╛рд░реЗ рд╕рд╛рде рдХреНрдпрд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ?
- MySQL 5.1.41 / 5.5.8, Oracle XE 10.2.0.1.0, DB2 9.7, PostGreSQL 9.0, H2 1.3.154, HSQLDB 2.1.0, SQLite, рдбрд░реНрдмреА 10.7 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ
- рд╕рдорд░реНрдерди Sybase, MSSQL, Ingres, Firebird рдХреЗ рд▓рд┐рдП рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рд╣реИ
- рди рдХреЗрд╡рд▓ рддрд╛рд▓рд┐рдХрд╛рдУрдВ / рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдмрд▓реНрдХрд┐ рд╡рд┐рдЪрд╛рд░реЛрдВ, рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд╛рд░реНрдпрд╡рд┐рдзрд┐рдпреЛрдВ, UDF, MySQL рдореЗрдВ ENUM рдЬреИрд╕реЗ рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди, рдмреВрдБрдж (рдЖрдк рдирд┐рдпрдорд┐рдд рдмрд╛рдЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдирдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ]]
- рдЪреВрдБрдХрд┐ рд╕рдВрдкреВрд░реНрдг рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдХреАрдорд╛ рдХреЛ рд╡рд░реНрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рднрд╛рд╖рд╛ IDE рдореЗрдВ рд╕реНрд╡рддрдГ рдкреВрд░реНрдг рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреА рд╣реИ
- рдХреЛрдИ SQL рдЗрдВрдЬреЗрдХреНрд╢рди рднреЗрджреНрдпрддрд╛ рдЬрдм рдареАрдХ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - jooq рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
- рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕
- рдЬреЗрдиреЗрд░рд┐рдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп рднреА рдкрд░реНрдпрд╛рдкреНрдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЪреЗрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╕рд╛рде рд╣реА, рдпрджрд┐ рдЖрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдХрд┐рд╕реА рдХреЙрд▓рдо рдХрд╛ рдирд╛рдо рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ, рддреЛ рдХрд┐рд╕реА рднреА рдХреЛрдб рдХреЛ рдареАрдХ рдХрд░рдирд╛ рднреВрд▓рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдмрд╛рд░-рдмрд╛рд░ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЧрд▓рдд рдХреЛрдб рдмрд╕ рд╕рдВрдХрд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
- рдореВрд▓ ActiveRecord рд╕рдорд░реНрдерди (рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдпрд╛ рджреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рд╡рд╛рдкрд╕ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)
- рди рдХреЗрд╡рд▓ рдЪрдпрдирд┐рдд рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ, рдмрд▓реНрдХрд┐ INSERT, UPDATE рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░реЗрдВред
- рдиреЗрд╕реНрдЯреЗрдб рдкреНрд░рд╢реНрдиреЛрдВ, рдордирдорд╛рдиреЗ рдлрд╝реАрд▓реНрдбреНрд╕, рдХреБрд▓ рдлрд╝рдВрдХреНрд╢рдВрд╕, UNION рдХреНрд╡реЗрд░реАрдЬрд╝, рдЕрдВрдХрдЧрдгрд┐рдд рдФрд░ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди
- рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХреЗ рд╣реИрдВ- fetch (), fetchAny (), fetchLazy (), fetchMap () рдФрд░ рдЕрдиреНрдпред
- рдЖрдВрддрд░рд┐рдХ Jooq рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рд░реВрдкрд░реЗрдЦрд╛ рд╕рд╣рд┐рдд, рдЕрдЪреНрдЫрд╛ SLF4J рд╕рдорд░реНрдердиред
- рдмрд╣реБрдд рд╕рд╛рд░реА рдЪреАрдЬреЛрдВ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ
- рд▓реЗрдЦрдХ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рд▓рдЧрд╛рддрд╛рд░ рд╣реИ, рдмрд╣реБрдд рдЬрд▓реНрджреА jooq Google рд╕рдореВрд╣ рдореЗрдВ рдФрд░ рдмрдЧ рдЯреНрд░реИрдХрд░ рдореЗрдВ рдЯрд┐рдХрдЯ рдкрд░ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИред
- рдорд╛рд╡реЗрди рдХрд╛ рд╕рдорд░реНрдердиред Jooq рд╡рд┐рддрд░рдг Maven Central рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред
- рджреЛрдиреЛрдВ рдбреАрдПрд╕рдПрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ (рдЪрдпрди) (рд╕реЗред) (рдХрд╣рд╛рдВ) () рдХрд╣рд╛рдВ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдУрдУрдкреА (рдПрдХ = рдирдИ рдПрд░реА (), a.addSelect (); a.addFrom ()) рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдердиред
- рдХреНрд╡реЗрд░реА рдкрд░рд┐рдгрд╛рдо рдФрд░ рдХреНрд╡реЗрд░реА рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрд╡рдпрдВ рд╕реАрд░рд┐рдпрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВред
рдЗрд╕рдореЗрдВ рд╣рдорд╛рд░рд╛ рдХреНрдпрд╛ рдХрд╕реВрд░ рд╣реИ?
- рдЬрдмрдХрд┐ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реАрдзрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕реЗ "UPDATE" рдпрд╛ "рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрдХреЗрдд" рдХрд╛ рдЪрдпрди SELECT рдореЗрдВ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╣реИ ред
- рдпрджрд┐ рдЖрдк рдПрдХ рд╣реА рдХрдХреНрд╖рд╛ рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдЯреЗрдмрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕реНрдереИрддрд┐рдХ рдЖрдпрд╛рдд рдХрд░рдирд╛ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдЬреЛ рдХреНрд╡реЗрд░реА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдХреБрдЫ рдЬрдЯрд┐рд▓рддрд╛ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ (рдКрдкрд░ рджрд┐рдП рдЧрдП рдПрдХ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЙрджрд╛рд╣рд░рдг)
Integer taskId = sqlFactory.select(Task.ID).from(Task.TASK).where(Task.STATUS.equal(TaskStatus.QUEUED)). orderBy(Task.LAST_UPDATED).limit(1).fetchOne(Task.ID);
- рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреНрд░реЙрд▓ рдХрд░рддреЗ рд╕рдордп рдПрдХ рдЫреЛрдЯрд╛ рдУрд╡рд░рд╣реЗрдб (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЫреЛрдЯрд╛ рд╣реИ, рджрд╕рд┐рдпреЛрдВ рд╕реЗ рд╕реИрдХрдбрд╝реЛрдВ рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб, рд╢рд╛рдпрдж)?
- MySQL рдореЗрдВ LAST_INSERT_ID () рдХреЗ рд▓рд┐рдП рдХреЛрдИ рддрддреНрдХрд╛рд▓ рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИ ред рд▓реЗрдХрд┐рди рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╣реИ ред рдЕрдиреБрдХреНрд░рдо рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ ред
рдЖрддреНрдореАрдпрддрд╛
- GitHub;) рдкрд░ рдЕрднреА рддрдХ рдХреЛрдИ рдХреЛрдб рдирд╣реАрдВ рд╣реИ, рдореБрдЦреНрдп рд╡рд┐рдХрд╛рд╕ рд╕рдмрд╡рд░реНрд╕рди рдореЗрдВ рд╣реИ
- SourceForge рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреЗрдЬ рдереЛрдбрд╝рд╛ рдзреАрдорд╛ рд╣реИ, рдЬреЛ рдереЛрдбрд╝рд╛ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИред
- рдореИрдиреБрдЕрд▓ рдХрд╛рдлреА рд╡рд┐рд╕реНрддреГрдд рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рд╕рд░рд▓ рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧреА рдЪреАрдЬреЗрдВ рдЧрд╛рдпрдм рд╣реИрдВред рдпрд╣ рдореБрдЭреЗ рднреА рд╕рд╣рдЬ рдирд╣реАрдВ рд▓рдЧ рд░рд╣рд╛ рдерд╛ред рдпрд╣ рдХреЗрд╡рд▓ "рдЪрд┐рдкреНрд╕", "рдмрдиреНрд╕" рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рд╕рдмрд╕реЗ рдмреБрдирд┐рдпрд╛рджреА рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд▓рдВрдмрд╛ рдЬрд╛рд╡рд╛ рдЕрдиреБрднрд╡ рд╣реИ, рддреЛ рдЖрдк рд╕рдВрднрд╡рддрдГ рдЗрд╕реЗ рдЦреБрдж рд╕реЗ рдЬрд▓реНрджреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдореБрдЭреЗ рдкреНрд░рддреАрдд рд╣реБрдЖ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдВрд░рдЪрд┐рдд рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдкрд░ рд╕реВрдЪрдирд╛ рдлреИрд▓реА рд╣реБрдИ рд╣реИред рдореИрдВ рд╣рдореЗрд╢рд╛ рдЬрд▓реНрджреА рдореЗрдВ рд╣реВрдВ рдФрд░ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдореИрдиреБрдЕрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ...
- рд╕рдореЗрдХрд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдирд╣реАрдВ рд╣реИ (рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рдЕрднреА рддрдХ рдПрдХ рдФрд░ рддрд░реАрдХреЗ рд╕реЗ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)
Field<Integer> jobTypeCountField = Job.JOBTYPE_ID.count().as("JOBTYPE_ID_COUNT"); Result<Record> jobTypeCountRecord = null; jobTypeCountRecord = sqlFactory.select(Job.JOBTYPE_ID, jobTypeCountField).from(Job.JOB) .where(Job.STATUS.equal(JobStatus.EXECUTING)).groupBy(Job.JOBTYPE_ID).fetch(); for (Record record : jobTypeCountRecord) { System.out.println(record.getValue(Job.JOBTYPE_ID) + " - " - record.getValue(jobTypeCountField)); }
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рд░рд╛рдп рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддреА рд╣реИред рдРрд╕рд╛ рдХреЛрдб рдХрд┐рд╕реА рдХреЛ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрдПрдЧрд╛ред
- рд╕рдВрд╕реНрдХрд░рдг 2.0 рдореЗрдВ, рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рдмрдиреНрд╕ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИред
- рдиреЙрди-рд╡рд┐рдХреА рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди (Trac) рдФрд░ рдЙрд╕ рдкрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдиреЗрд╡рд┐рдЧреЗрд╢рди рднреА рдирд╣реАрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, Ctrl-Q рджреНрд╡рд╛рд░рд╛ рд╕рдм рдХреБрдЫ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП javadoc рдХреЛрдб рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Trac рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЧрд▓рддреА рд▓рдЧрддреА рд╣реИ ...
- рдЕрдм рддрдХ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдХрдо рд╕рдВрдЦреНрдпрд╛ред
рдЕрдзрд┐рдХ рдПрдирд╛рд▓реЙрдЧ, рдереЛрдбрд╝реА рдЕрд▓рдЧ рдпреЛрдЬрдирд╛
рд╕рдВрдкрд░реНрдХ рд╡рд┐рд╡рд░рдг:
рдЬреВрдХ рд╕реНрд░реЛрдд рд╕реЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг (MySQL рдореЗрдВ info_schema рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛)
рд╢рд╛рдпрдж Geshi рд╕реЗ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде
рдпрд╣рд╛рдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
select(KeyColumnUsage.CONSTRAINT_NAME, KeyColumnUsage.TABLE_NAME, KeyColumnUsage.COLUMN_NAME) .from(KEY_COLUMN_USAGE).join(TABLE_CONSTRAINTS) .on(KeyColumnUsage.TABLE_SCHEMA.equal(TableConstraints.TABLE_SCHEMA)) .and(KeyColumnUsage.TABLE_NAME.equal(TableConstraints.TABLE_NAME)) .and(KeyColumnUsage.CONSTRAINT_NAME.equal(TableConstraints.CONSTRAINT_NAME)) .where(TableConstraints.CONSTRAINT_TYPE.equal(constraintType)) .and(KeyColumnUsage.TABLE_SCHEMA.equal(getSchemaName())) .orderBy(KeyColumnUsage.TABLE_NAME.ascending(), KeyColumnUsage.ORDINAL_POSITION.ascending()).fetch()
for (Record record : create().select( ReferentialConstraints.CONSTRAINT_NAME, ReferentialConstraints.TABLE_NAME, ReferentialConstraints.REFERENCED_TABLE_NAME, ReferentialConstraints.UNIQUE_CONSTRAINT_NAME, KeyColumnUsage.COLUMN_NAME) .from(REFERENTIAL_CONSTRAINTS) .join(KEY_COLUMN_USAGE) .on(ReferentialConstraints.CONSTRAINT_SCHEMA.equal(KeyColumnUsage.CONSTRAINT_SCHEMA)) .and(ReferentialConstraints.CONSTRAINT_NAME.equal(KeyColumnUsage.CONSTRAINT_NAME)) .where(ReferentialConstraints.CONSTRAINT_SCHEMA.equal(getSchemaName())) .orderBy( KeyColumnUsage.CONSTRAINT_NAME.ascending(), KeyColumnUsage.ORDINAL_POSITION.ascending()) .fetch()) { String foreignKey = record.getValue(ReferentialConstraints.CONSTRAINT_NAME); String foreignKeyColumn = record.getValue(KeyColumnUsage.COLUMN_NAME); String foreignKeyTableName = record.getValue(ReferentialConstraints.TABLE_NAME); String referencedKey = record.getValue(ReferentialConstraints.UNIQUE_CONSTRAINT_NAME); String referencedTableName = record.getValue(ReferentialConstraints.REFERENCED_TABLE_NAME); TableDefinition foreignKeyTable = getTable(foreignKeyTableName); if (foreignKeyTable != null) { ColumnDefinition column = foreignKeyTable.getColumn(foreignKeyColumn); String key = getKeyName(referencedTableName, referencedKey); relations.addForeignKey(foreignKey, key, column); } }