зеркало из
				https://github.com/iharh/notes.git
				synced 2025-10-31 05:36:08 +02:00 
			
		
		
		
	m
Этот коммит содержится в:
		
							родитель
							
								
									59dcc62045
								
							
						
					
					
						Коммит
						7f17fbd074
					
				
							
								
								
									
										1
									
								
								db/sql/mssql/feature/internals/transaction-log.txt
									
									
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										1
									
								
								db/sql/mssql/feature/internals/transaction-log.txt
									
									
									
									
									
										Обычный файл
									
								
							| @ -0,0 +1 @@ | |||||||
|  | https://learn.microsoft.com/en-us/sql/relational-databases/logs/the-transaction-log-sql-server | ||||||
| @ -5,9 +5,14 @@ https://www.baeldung.com/spring-reloading-properties | |||||||
| 2021 | 2021 | ||||||
| https://www.baeldung.com/spring-yaml | https://www.baeldung.com/spring-yaml | ||||||
| 2020 | 2020 | ||||||
|  | https://www.baeldung.com/spring-enable-config-properties | ||||||
|  |     @EnableConfigurationProperties | ||||||
|  |         Enable support for @ConfigurationProperties annotated beans | ||||||
| https://www.baeldung.com/properties-with-spring | https://www.baeldung.com/properties-with-spring | ||||||
| https://www.baeldung.com/configuration-properties-in-spring-boot | https://www.baeldung.com/configuration-properties-in-spring-boot | ||||||
|     @ConfigurationProperties |     classes, annotated with just | ||||||
|  |         @ConfigurationProperties(prefix=) | ||||||
|  |     are still simple POJOs | ||||||
|     https://github.com/eugenp/tutorials/tree/master/spring-boot-modules/spring-boot-properties |     https://github.com/eugenp/tutorials/tree/master/spring-boot-modules/spring-boot-properties | ||||||
| 
 | 
 | ||||||
| system-properties | system-properties | ||||||
|  | |||||||
							
								
								
									
										13
									
								
								pl/java/libfws/spring/data/jpa/features/collections.txt
									
									
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										13
									
								
								pl/java/libfws/spring/data/jpa/features/collections.txt
									
									
									
									
									
										Обычный файл
									
								
							| @ -0,0 +1,13 @@ | |||||||
|  | MarkdownUserModel { | ||||||
|  |     ... | ||||||
|  |     @Column(unique=true) | ||||||
|  |     private String username; | ||||||
|  |     ... | ||||||
|  |     @ElementCollection(fetch = FetchType.LAZY) | ||||||
|  |     private List<String> roles; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ... | ||||||
|  | at repo | ||||||
|  | @EntityGraph(attributePaths="roles") | ||||||
|  | Optional<MarkdownUserModel> findByUsername(String username); | ||||||
| @ -0,0 +1 @@ | |||||||
|  | dirty checking | ||||||
							
								
								
									
										113
									
								
								pl/java/libfws/spring/data/jpa/features/internals/hbm-loader.txt
									
									
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										113
									
								
								pl/java/libfws/spring/data/jpa/features/internals/hbm-loader.txt
									
									
									
									
									
										Обычный файл
									
								
							| @ -0,0 +1,113 @@ | |||||||
|  | org.hibernate.loader | ||||||
|  |     public abstract class Loader { | ||||||
|  |         list() { | ||||||
|  |             listIgnoreQueryCache(...) | ||||||
|  |         } | ||||||
|  |         private List listIgnoreQueryCache(SharedSessionContractImplementor session, QueryParameters queryParameters) { | ||||||
|  | 		        return getResultList( doList( session, queryParameters ), queryParameters.getResultTransformer() ); | ||||||
|  | 	      } | ||||||
|  |         private List doQuery(...) { | ||||||
|  |             final SqlStatementWrapper wrapper = executeQueryStatement( queryParameters, false, afterLoadActions, session ); | ||||||
|  |             final ResultSet rs = wrapper.getResultSet(); | ||||||
|  |             final Statement st = wrapper.getStatement(); | ||||||
|  |             ... | ||||||
|  |             try { | ||||||
|  |               return processResultSet( | ||||||
|  |                   rs, | ||||||
|  |                   queryParameters, | ||||||
|  |                   session, | ||||||
|  |                   returnProxies, | ||||||
|  |                   forcedResultTransformer, | ||||||
|  |                   maxRows, | ||||||
|  |                   afterLoadActions | ||||||
|  |               ); | ||||||
|  |             } | ||||||
|  |             ... | ||||||
|  |         } | ||||||
|  |         protected List processResultSet(...) { | ||||||
|  |             final List results = getRowsFromResultSet( | ||||||
|  |             initializeEntitiesAndCollections( | ||||||
|  |                 hydratedObjects, | ||||||
|  |                 rs, | ||||||
|  |                 session, | ||||||
|  |                 queryParameters.isReadOnly( session ), | ||||||
|  |                 afterLoadActions | ||||||
|  |             ); | ||||||
|  |             if ( createSubselects ) { | ||||||
|  |               createSubselects( subselectResultKeys, queryParameters, session ); | ||||||
|  |             } | ||||||
|  |             return results; | ||||||
|  |         } | ||||||
|  |         protected List<Object> getRowsFromResultSet( | ||||||
|  |             ResultSet rs, | ||||||
|  |             QueryParameters queryParameters, | ||||||
|  |             SharedSessionContractImplementor session, | ||||||
|  |             boolean returnProxies, | ||||||
|  |             ResultTransformer forcedResultTransformer, | ||||||
|  |             int maxRows, | ||||||
|  |             List<Object> hydratedObjects, | ||||||
|  |             List<EntityKey[]> subselectResultKeys) throws SQLException { | ||||||
|  |             ... | ||||||
|  |             LOG.trace( "Processing result set" ); | ||||||
|  |             int count; | ||||||
|  | 
 | ||||||
|  |             final boolean debugEnabled = LOG.isDebugEnabled(); | ||||||
|  |             for ( count = 0; count < maxRows && rs.next(); count++ ) { | ||||||
|  |               if ( debugEnabled ) { | ||||||
|  |                 LOG.debugf( "Result set row: %s", count ); | ||||||
|  |               } | ||||||
|  |               Object result = getRowFromResultSet( | ||||||
|  |                   rs, | ||||||
|  |                   session, | ||||||
|  |                   queryParameters, | ||||||
|  |                   lockModesArray, | ||||||
|  |                   optionalObjectKey, | ||||||
|  |                   hydratedObjects, | ||||||
|  |                   keys, | ||||||
|  |                   returnProxies, | ||||||
|  |                   forcedResultTransformer | ||||||
|  |               ); | ||||||
|  |               results.add( result ); | ||||||
|  |               if ( createSubselects ) { | ||||||
|  |                 subselectResultKeys.add( keys ); | ||||||
|  |                 keys = new EntityKey[entitySpan]; //can't reuse in this case | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             LOG.tracev( "Done processing result set ({0} rows)", count ); | ||||||
|  | 
 | ||||||
|  |             return results; | ||||||
|  |         } | ||||||
|  |         private Object getRowFromResultSet(..) { | ||||||
|  |           ... | ||||||
|  |           // this call is side-effecty | ||||||
|  |           Object[] row = getRow( | ||||||
|  |               resultSet, | ||||||
|  |               persisters, | ||||||
|  |               keys, | ||||||
|  |               queryParameters.getOptionalObject(), | ||||||
|  |               optionalObjectKey, | ||||||
|  |               lockModesArray, | ||||||
|  |               hydratedObjects, | ||||||
|  |               session | ||||||
|  |           ); | ||||||
|  |           ... | ||||||
|  |         } | ||||||
|  |         getRaw(...) { | ||||||
|  |         } | ||||||
|  |         /** | ||||||
|  |          * Hydrate the state an object from the SQL <tt>ResultSet</tt>, into | ||||||
|  |          * an array or "hydrated" values (do not resolve associations yet), | ||||||
|  |          * and pass the hydrates state to the session. | ||||||
|  |          */ | ||||||
|  |         private void loadFromResultSet(...) { | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | // * A delegate that implements the Loader part of QueryTranslator. | ||||||
|  | public class QueryLoader extends BasicLoader { | ||||||
|  | 
 | ||||||
|  | 	// The query translator that is delegating to this object. | ||||||
|  | 	private QueryTranslatorImpl queryTranslator; | ||||||
|  |   ... | ||||||
|  | } | ||||||
							
								
								
									
										276
									
								
								pl/java/libfws/spring/data/jpa/features/internals/hbm-query-plan.txt
									
									
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										276
									
								
								pl/java/libfws/spring/data/jpa/features/internals/hbm-query-plan.txt
									
									
									
									
									
										Обычный файл
									
								
							| @ -0,0 +1,276 @@ | |||||||
|  | https://hibernate.atlassian.net/jira/software/c/projects/HHH/issues/HHH-11208 | ||||||
|  | 
 | ||||||
|  | cfg | ||||||
|  | https://github.com/hibernate/hibernate-orm/blob/5.6/hibernate-core/src/main/java/org/hibernate/cfg/Environment.java | ||||||
|  | https://github.com/hibernate/hibernate-orm/blob/5.6/hibernate-core/src/main/java/org/hibernate/cfg/AvailableSettings.java | ||||||
|  | 	/** | ||||||
|  | 	 * Raises an exception when in-memory pagination over collection fetch is about to be performed. | ||||||
|  | 	 * Disabled by default. Set to true to enable. | ||||||
|  | 	 */ | ||||||
|  | 	String FAIL_ON_PAGINATION_OVER_COLLECTION_FETCH = "hibernate.query.fail_on_pagination_over_collection_fetch"; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | SqlGenerator | ||||||
|  | QueryPlanCache | ||||||
|  | unwrap( org.hibernate.internal.QueryImpl.class ).setQueryPlan | ||||||
|  | 
 | ||||||
|  | https://github.com/hibernate/hibernate-orm/tree/5.6/hibernate-core/src/main/java/org/hibernate/engine/query/spi | ||||||
|  | https://docs.jboss.org/hibernate/orm/5.4/javadocs/org/hibernate/engine/query/spi/package-frame.html | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | HQLQueryPlan | ||||||
|  |   SessionFactoryBuilderImpl | ||||||
|  |       @Override | ||||||
|  |       public SessionFactory build() { | ||||||
|  |         ... | ||||||
|  |         // QueryPlanCreator=HQLQueryPlan::new | ||||||
|  |         return new SessionFactoryImpl( metadata, buildSessionFactoryOptions(), HQLQueryPlan::new); // this is just a c-tor | ||||||
|  |       } | ||||||
|  | https://docs.jboss.org/hibernate/orm/5.4/javadocs/org/hibernate/engine/query/spi/HQLQueryPlan.html | ||||||
|  | https://github.com/hibernate/hibernate-orm/blob/5.4/hibernate-core/src/main/java/org/hibernate/engine/query/spi/HQLQueryPlan.java | ||||||
|  |     // Defines a query execution plan for an HQL query (or filter). | ||||||
|  |     public class HQLQueryPlan implements Serializable { | ||||||
|  |         protected HQLQueryPlan( | ||||||
|  |               String hql, | ||||||
|  |               String collectionRole, | ||||||
|  |               boolean shallow, | ||||||
|  |               Map<String,Filter> enabledFilters, | ||||||
|  |               SessionFactoryImplementor factory, | ||||||
|  |               EntityGraphQueryHint entityGraphQueryHint) { | ||||||
|  |             this.sourceQuery = hql; | ||||||
|  |             this.shallow = shallow; | ||||||
|  | 
 | ||||||
|  |             if ( enabledFilters.isEmpty() ) { | ||||||
|  |               this.enabledFilterNames = Collections.emptySet(); | ||||||
|  |             } | ||||||
|  |             else { | ||||||
|  |               this.enabledFilterNames = Collections.unmodifiableSet( new HashSet<>( enabledFilters.keySet() ) ); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             final String[] concreteQueryStrings = QuerySplitter.concreteQueries( hql, factory ); | ||||||
|  |             final int length = concreteQueryStrings.length; | ||||||
|  |             this.translators = new QueryTranslator[length]; | ||||||
|  | 
 | ||||||
|  |             final Set<Serializable> combinedQuerySpaces = new HashSet<>(); | ||||||
|  | 
 | ||||||
|  |             final Map querySubstitutions = factory.getSessionFactoryOptions().getQuerySubstitutions(); | ||||||
|  |             final QueryTranslatorFactory queryTranslatorFactory = factory.getServiceRegistry().getService( QueryTranslatorFactory.class ); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |             for ( int i=0; i<length; i++ ) { | ||||||
|  |               if ( collectionRole == null ) { | ||||||
|  |                 translators[i] = queryTranslatorFactory | ||||||
|  |                     .createQueryTranslator( hql, concreteQueryStrings[i], enabledFilters, factory, entityGraphQueryHint ); | ||||||
|  |                 translators[i].compile( querySubstitutions, shallow ); | ||||||
|  |               } | ||||||
|  |               else { | ||||||
|  |                 translators[i] = queryTranslatorFactory | ||||||
|  |                     .createFilterTranslator( hql, concreteQueryStrings[i], enabledFilters, factory ); | ||||||
|  |                 ( (FilterTranslator) translators[i] ).compile( collectionRole, querySubstitutions, shallow ); | ||||||
|  |               } | ||||||
|  |               combinedQuerySpaces.addAll( translators[i].getQuerySpaces() ); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             this.querySpaces = combinedQuerySpaces; | ||||||
|  | 
 | ||||||
|  |             if ( length == 0 ) { | ||||||
|  |               parameterMetadata = new ParameterMetadataImpl( null, null ); | ||||||
|  |               returnMetadata = null; | ||||||
|  |             } | ||||||
|  |             else { | ||||||
|  |               this.parameterMetadata = buildParameterMetadata( translators[0].getParameterTranslations(), hql ); | ||||||
|  |               if ( translators[0].isManipulationStatement() ) { | ||||||
|  |                 returnMetadata = null; | ||||||
|  |               } | ||||||
|  |               else { | ||||||
|  |                 final Type[] types = ( length > 1 ) ? new Type[translators[0].getReturnTypes().length] : translators[0].getReturnTypes(); | ||||||
|  |                 returnMetadata = new ReturnMetadata( translators[0].getReturnAliases(), types ); | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  | 
 | ||||||
|  |           public List performList(...) { | ||||||
|  |             ... | ||||||
|  |             for ( QueryTranslator translator : translators ) { | ||||||
|  |               final List tmp = translator.list( session, queryParametersToUse ); | ||||||
|  |             } | ||||||
|  |             ... | ||||||
|  |           } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | https://docs.jboss.org/hibernate/orm/5.4/javadocs/org/hibernate/engine/query/spi/FilterQueryPlan.html | ||||||
|  | https://docs.jboss.org/hibernate/orm/5.4/javadocs/org/hibernate/engine/query/spi/NativeSQLQueryPlan.html | ||||||
|  |     https://github.com/hibernate/hibernate-orm/blob/5.5/hibernate-core/src/main/java/org/hibernate/engine/query/spi/NativeQueryInterpreter.java | ||||||
|  |         NativeSQLQueryPlan createQueryPlan(...) | ||||||
|  | 
 | ||||||
|  | https://docs.jboss.org/hibernate/orm/5.4/javadocs/org/hibernate/engine/query/spi/QueryPlanCache.html | ||||||
|  | https://github.com/hibernate/hibernate-orm/blob/5.4/hibernate-core/src/main/java/org/hibernate/engine/query/spi/QueryPlanCache.java | ||||||
|  |     @FunctionalInterface | ||||||
|  |     public interface QueryPlanCreator { | ||||||
|  |       HQLQueryPlan createQueryPlan(String queryString, boolean shallow, Map<String, Filter> enabledFilters, SessionFactoryImplementor factory); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public QueryPlanCache(final SessionFactoryImplementor factory, QueryPlanCreator queryPlanCreator) { | ||||||
|  |         ... | ||||||
|  |         // Environment.QUERY_PLAN_CACHE_PARAMETER_METADATA_MAX_SIZE, | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public HQLQueryPlan getHQLQueryPlan(String queryString, boolean shallow, Map<String, Filter> enabledFilters) throws QueryException, MappingException { | ||||||
|  |         final HQLQueryPlanKey key = new HQLQueryPlanKey(queryString, shallow, enabledFilters); | ||||||
|  |         HQLQueryPlan value = (HQLQueryPlan) queryPlanCache.get( key ); | ||||||
|  |         final StatisticsImplementor statistics = factory.getStatistics(); | ||||||
|  |         boolean stats = statistics.isStatisticsEnabled(); | ||||||
|  |         if (value == null) { | ||||||
|  |           final long startTime = ( stats ) ? System.nanoTime() : 0L; | ||||||
|  | 
 | ||||||
|  |           LOG.tracev( "Unable to locate HQL query plan in cache; generating ({0})", queryString ); | ||||||
|  |           value = queryPlanCreator.createQueryPlan( queryString, shallow, enabledFilters, factory ); | ||||||
|  |           ... | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public NativeSQLQueryPlan getNativeSQLQueryPlan(final NativeSQLQuerySpecification spec) { | ||||||
|  |         ..veQueryInterpreter.createQueryPlan( spec, factory ); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | org.hibernate.hql.internal.ast. | ||||||
|  |     ASTQueryTranslatorFactory { | ||||||
|  |       ... | ||||||
|  |       @Override | ||||||
|  |       public QueryTranslator createQueryTranslator( | ||||||
|  |           String queryIdentifier, | ||||||
|  |           String queryString, | ||||||
|  |           Map filters, | ||||||
|  |           SessionFactoryImplementor factory, | ||||||
|  |           EntityGraphQueryHint entityGraphQueryHint) { | ||||||
|  |         return new QueryTranslatorImpl( queryIdentifier, queryString, filters, factory, entityGraphQueryHint ); | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     public class QueryTranslatorImpl implements FilterTranslator { | ||||||
|  |         ... | ||||||
|  |         c-tor(... EntityGraphQueryHint entityGraphQueryHint) | ||||||
|  | 
 | ||||||
|  |         private HqlSqlWalker analyze(HqlParser parser, String collectionRole) throws QueryException, RecognitionException { | ||||||
|  |             ... | ||||||
|  |             LOG.debug( TokenPrinters.SQL_TOKEN_PRINTER.showAsString( w.getAST(), "--- SQL AST ---" ) ); | ||||||
|  |             ... | ||||||
|  |         } | ||||||
|  |         void showHqlAst(AST hqlAst) { | ||||||
|  |           if ( LOG.isDebugEnabled() ) { | ||||||
|  |             LOG.debug( TokenPrinters.HQL_TOKEN_PRINTER.showAsString( hqlAst, "--- HQL AST ---" ) ); | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |         @Override | ||||||
|  |         public List list(SharedSessionContractImplementor session, QueryParameters queryParameters) throws HibernateException { | ||||||
|  |           // Delegate to the QueryLoader... | ||||||
|  |           ... | ||||||
|  |           List results = queryLoader.list( session, queryParametersToUse ); | ||||||
|  |           ... | ||||||
|  |         } | ||||||
|  |         @Override | ||||||
|  |         public Iterator iterate(QueryParameters queryParameters, EventSource session) throws HibernateException { | ||||||
|  |           // Delegate to the QueryLoader... | ||||||
|  |           ... | ||||||
|  |           return queryLoader.iterate( queryParameters, session ); | ||||||
|  |         } | ||||||
|  |         @Override | ||||||
|  |         public ScrollableResultsImplementor scroll(QueryParameters queryParameters, SharedSessionContractImplementor session) throws HibernateException { | ||||||
|  |           // Delegate to the QueryLoader... | ||||||
|  |           ... | ||||||
|  |           return queryLoader.scroll( queryParameters, session ); | ||||||
|  |         } | ||||||
|  |         // update stuff | ||||||
|  | 
 | ||||||
|  |         public EntityGraphQueryHint getEntityGraphQueryHint() { | ||||||
|  |           return entityGraphQueryHint; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public void setEntityGraphQueryHint(EntityGraphQueryHint entityGraphQueryHint) { | ||||||
|  |           this.entityGraphQueryHint = entityGraphQueryHint; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public final class HqlParser extends HqlBaseParser { | ||||||
|  |         ... | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     public class SqlGenerator extends SqlGeneratorBase implements ErrorReporter { | ||||||
|  |         ... | ||||||
|  |     } | ||||||
|  |     HqlSqlWalker | ||||||
|  | 
 | ||||||
|  | org.hibernate.loader.hql | ||||||
|  |     QueryLoader | ||||||
|  |       list() -> call Loader | ||||||
|  | 
 | ||||||
|  | org.hibernate.loader | ||||||
|  |     public abstract class Loader { | ||||||
|  |         ... // separate file | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ? | ||||||
|  | org.hibernate.hql.internal.classic.QueryTranslatorImpl | ||||||
|  |     /** | ||||||
|  |      * Compile the query (generate the SQL). | ||||||
|  |      */ | ||||||
|  |     private void compile() throws QueryException, MappingException { | ||||||
|  |       try { | ||||||
|  |         ParserHelper.parse( | ||||||
|  |             new PreprocessingParser( tokenReplacements ), | ||||||
|  |             queryString, | ||||||
|  |             ParserHelper.HQL_SEPARATORS, | ||||||
|  |             this | ||||||
|  |         ); | ||||||
|  |         renderSQL(); | ||||||
|  |       } | ||||||
|  |       postInstantiate(); | ||||||
|  |       compiled = true; | ||||||
|  |     } | ||||||
|  |     private void renderSQL() throws QueryException, MappingException { | ||||||
|  |     } | ||||||
|  |     protected void postInstantiate() { | ||||||
|  |         ... | ||||||
|  |         fill descriptors (DefaultEntityAliases), collectionDescriptors (ColllectionAliases, GeneratedCollectionAliases) | ||||||
|  |         // ? ColumnCollectionAliases org.hibernate.loader.custom | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:189) | ||||||
|  | at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:144) | ||||||
|  | at org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:113) | ||||||
|  | at org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:73) | ||||||
|  | at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:155) | ||||||
|  | at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:604) | ||||||
|  | 
 | ||||||
|  | ? EntityPersister, | ||||||
|  | org.hibernate.persister.entity.AbstractClassEntityPersister | ||||||
|  | org.hibernate.hql.internal.classic | ||||||
|  |     PreprocessingParser | ||||||
|  |         uses QueryTranslatorImpl (?classic) | ||||||
|  |     -> ClauseParser !!! | ||||||
|  |     HavingParser | ||||||
|  |     GroupByParser | ||||||
|  |     ... | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ???  | ||||||
|  | org.hibernate.graph | ||||||
|  |     GraphParser // for tests only | ||||||
|  |  * Parser for string representations of JPA {@link javax.persistence.EntityGraph} | ||||||
|  |  * ({@link RootGraph}) and {@link javax.persistence.Subgraph} ({@link SubGraph}), | ||||||
|  |  * using a simple syntax defined by the `graph.g` Antlr grammar. | ||||||
|  | 
 | ||||||
|  | org.hibernate.jpa | ||||||
|  |     QueryHints { | ||||||
|  |         ... | ||||||
|  |         CACHEMODE, FLUSHMODE | ||||||
|  |         ...  | ||||||
|  |         public static final String COMMENT = "org.hibernate.comment"; | ||||||
|  |         ... | ||||||
|  |         public static final String FOLLOW_ON_LOCKING = "hibernate.query.followOnLocking"; | ||||||
|  |         public static final String HINT_FOLLOW_ON_LOCKING = FOLLOW_ON_LOCKING; | ||||||
|  |         tons of JPA hints | ||||||
|  |         public static final String HINT_FETCHGRAPH = GraphSemantic.FETCH.getJpaHintName(); | ||||||
|  |         public static final String HINT_LOADGRAPH = GraphSemantic.LOAD.getJpaHintName(); | ||||||
|  |     } | ||||||
| @ -0,0 +1,6 @@ | |||||||
|  | https://docs.jboss.org/hibernate/orm/4.3/devguide/en-US/html/ch11.html | ||||||
|  |     11.3.3. Explicit joins | ||||||
|  |       An important use case for explicit joins is to define FETCH JOINS which override the laziness of the joined association | ||||||
|  |       left join fetch | ||||||
|  | 
 | ||||||
|  | https://github.com/hibernate/hibernate-orm/blob/5.4/hibernate-core/src/main/antlr/hql.g | ||||||
| @ -6,6 +6,9 @@ https://www.baeldung.com/hibernate-common-performance-problems-in-logs | |||||||
|     https://thorben-janssen.com/jpa-21-entity-graph-part-2-define/ |     https://thorben-janssen.com/jpa-21-entity-graph-part-2-define/ | ||||||
| https://www.baeldung.com/spring-data-jpa-named-entity-graphs | https://www.baeldung.com/spring-data-jpa-named-entity-graphs | ||||||
| 2021 | 2021 | ||||||
|  | https://foojay.io/today/a-walk-to-lazy-fetching-with-hibernate-and-spring-data-jpa/ | ||||||
|  |     https://github.com/mainul35/social-community | ||||||
|  |     ! pure hbm | ||||||
| https://vladmihalcea.com/jpa-entity-graph/ | https://vladmihalcea.com/jpa-entity-graph/ | ||||||
|     https://vladmihalcea.com/jpa-default-fetch-plan/ |     https://vladmihalcea.com/jpa-default-fetch-plan/ | ||||||
|         ! |         ! | ||||||
| @ -29,3 +32,6 @@ https://stackoverflow.com/questions/71175593/how-does-jpa-entitygraph-allow-chos | |||||||
| 
 | 
 | ||||||
| 2019 | 2019 | ||||||
| https://www.youtube.com/watch?v=b2a4rVR5hiQ | https://www.youtube.com/watch?v=b2a4rVR5hiQ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | pvt/idp/loyalty/loyalty-mock-service | ||||||
|  | |||||||
		Загрузка…
	
	
			
			x
			
			
		
	
		Ссылка в новой задаче
	
	Block a user
	 Ihar Hancharenka
						Ihar Hancharenka