[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-4838) 2L-Querycache ImmutableNaturalKeyLookup not properly recognized as hasImmutableNaturalId() is called on wrong EntityMetamodel

Nicolas (JIRA) noreply at atlassian.com
Tue Nov 30 04:29:13 EST 2010


    [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-4838?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=39230#action_39230 ] 

Nicolas commented on HHH-4838:
------------------------------

@Gail -> could you please let me know if this issue is going to be for 3.6.1? I understand it will but it'd be nice to have your confirmation.

@Guenther -> the proposed patch wouldn't work if the criteria has been created with a different alias, right?

Regards,
Nico


> 2L-Querycache ImmutableNaturalKeyLookup not properly recognized as hasImmutableNaturalId() is called on wrong EntityMetamodel
> -----------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HHH-4838
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-4838
>             Project: Hibernate Core
>          Issue Type: Bug
>          Components: caching (L2)
>    Affects Versions: 3.5.0-Beta-3
>         Environment: 3.5.0-Beta3, HSQLDB, EHCache as 2L cache implementation
>            Reporter: Guenther Demetz
>            Assignee: Gail Badner
>             Fix For: 3.6.1
>
>         Attachments: TestImmutableNaturalId.jar, TestImmutableNaturalKeyLookup.jar
>
>
> If a entityclass with immutable naturalId has non-lazy properties (for instance a OneToOne association),
> then more entityPersisters are involved in the query as it becomes a join-query eager loading the associated entity.
> The method Loader#getResultFromQueryCache presumes that the first entityPersister in the array is the main entity class.
> boolean isImmutableNaturalKeyLookup = queryParameters.isNaturalKeyLookup()
> 					&& getEntityPersisters()[0].getEntityMetamodel().hasImmutableNaturalId();
> Debugging attached testcase you can see indeed that getEntityPersisters()[0] returns SingleTableEntityPersister(hello.D)
> which is the persister of the associated entity, not the main one!
> Consequently the query is not considered as isImmutableNaturalKeyLookup, despite fullfilling all conditions.
> Here my output (with enabled p6spy):
> 11:53:15,651  INFO Version:37 - Hibernate Annotations 3.5.0.Beta1
> 11:53:15,690  INFO Environment:563 - Hibernate 3.5.0-Beta-3
> 11:53:15,694  INFO Environment:596 - hibernate.properties not found
> 11:53:15,700  INFO Environment:774 - Bytecode provider name : javassist
> 11:53:15,706  INFO Environment:655 - using JDK 1.4 java.sql.Timestamp handling
> 11:53:15,863  INFO Version:38 - Hibernate EntityManager 3.5.0.Beta1
> 11:53:16,356  INFO AnnotationBinder:446 - Binding entity from annotated class: hello.A
> 11:53:16,424  INFO EntityBinder:471 - Bind entity hello.A on table A
> 11:53:16,526  INFO AnnotationBinder:446 - Binding entity from annotated class: hello.D
> 11:53:16,527  INFO EntityBinder:471 - Bind entity hello.D on table D
> 11:53:16,686  WARN Ejb3Configuration:943 - hibernate.connection.autocommit = false break the EJB3 specification
> 11:53:16,702  INFO HibernateSearchEventListenerRegister:75 - Unable to find org.hibernate.search.event.FullTextIndexEventListener on the classpath. Hibernate Search is not enabled.
> 11:53:16,718  INFO DriverManagerConnectionProvider:64 - Using Hibernate built-in connection pool (not for production use!)
> 11:53:16,719  INFO DriverManagerConnectionProvider:65 - Hibernate connection pool size: 20
> 11:53:16,720  INFO DriverManagerConnectionProvider:68 - autocommit mode: false
> 11:53:16,921  INFO DriverManagerConnectionProvider:103 - using driver: com.p6spy.engine.spy.P6SpyDriver at URL: jdbc:hsqldb:hsql://localhost
> 11:53:16,922  INFO DriverManagerConnectionProvider:109 - connection properties: {user=sa, password=****, autocommit=false, release_mode=after_transaction}
> 11:53:17,002  INFO SettingsFactory:117 - RDBMS: HSQL Database Engine, version: 1.8.0
> 11:53:17,004  INFO SettingsFactory:118 - JDBC driver: HSQL Database Engine Driver, version: 1.8.0
> 11:53:17,068  INFO Dialect:223 - Using dialect: org.hibernate.dialect.HSQLDialect
> 11:53:17,082  INFO JdbcSupportLoader:79 - Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4
> 11:53:17,085  INFO TransactionFactoryFactory:62 - Transaction strategy: org.hibernate.transaction.JDBCTransactionFactory
> 11:53:17,089  INFO TransactionManagerLookupFactory:80 - No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
> 11:53:17,090  INFO SettingsFactory:169 - Automatic flush during beforeCompletion(): disabled
> 11:53:17,091  INFO SettingsFactory:173 - Automatic session close at end of transaction: disabled
> 11:53:17,097  INFO SettingsFactory:188 - Scrollable result sets: enabled
> 11:53:17,098  INFO SettingsFactory:196 - JDBC3 getGeneratedKeys(): disabled
> 11:53:17,099  INFO SettingsFactory:204 - Connection release mode: after_transaction
> 11:53:17,101  INFO SettingsFactory:231 - Default batch fetch size: 1
> 11:53:17,103  INFO SettingsFactory:235 - Generate SQL with comments: disabled
> 11:53:17,104  INFO SettingsFactory:239 - Order SQL updates by primary key: disabled
> 11:53:17,105  INFO SettingsFactory:243 - Order SQL inserts for batching: disabled
> 11:53:17,107  INFO SettingsFactory:410 - Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
> 11:53:17,114  INFO SettingsFactory:251 - Query language substitutions: {}
> 11:53:17,115  INFO SettingsFactory:256 - JPA-QL strict compliance: enabled
> 11:53:17,121  INFO SettingsFactory:261 - Second-level cache: enabled
> 11:53:17,130  INFO SettingsFactory:265 - Query cache: enabled
> 11:53:17,143  INFO SettingsFactory:395 - Cache region factory : org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge
> 11:53:17,144  INFO RegionFactoryCacheProviderBridge:61 - Cache provider: net.sf.ehcache.hibernate.SingletonEhCacheProvider
> 11:53:17,150  INFO SettingsFactory:275 - Optimize cache for minimal puts: disabled
> 11:53:17,151  INFO SettingsFactory:284 - Structured second-level cache entries: disabled
> 11:53:17,151  INFO SettingsFactory:374 - Query cache factory: org.hibernate.cache.StandardQueryCacheFactory
> 11:53:17,165  INFO SettingsFactory:313 - Statistics: disabled
> 11:53:17,166  INFO SettingsFactory:317 - Deleted entity synthetic identifier rollback: disabled
> 11:53:17,166  INFO SettingsFactory:332 - Default entity-mode: pojo
> 11:53:17,167  INFO SettingsFactory:336 - Named query checking : enabled
> 11:53:17,167  INFO SettingsFactory:340 - Check Nullability in Core (should be disabled when Bean Validation is on): disabled
> 11:53:17,240  INFO SessionFactoryImpl:197 - building session factory
> 11:53:17,260  WARN ConfigurationFactory:131 - No configuration found. Configuring ehcache from ehcache-failsafe.xml  found in the classpath: jar:file:/home/pb00067/Desktop/ehcache-1.7.1/lib/ehcache-core-1.7.1.jar!/ehcache-failsafe.xml
> 11:53:17,361  WARN SingletonEhCacheProvider:92 - Could not find a specific ehcache configuration for cache named [hello.A]; using defaults.
> 11:53:17,566  WARN SingletonEhCacheProvider:92 - Could not find a specific ehcache configuration for cache named [hello.D]; using defaults.
> 11:53:17,661  INFO SchemaExport:226 - Running hbm2ddl schema export
> 11:53:17,663  INFO SchemaExport:251 - exporting generated schema to database
> p6spy - 1264416797664|0|0|commit||
> p6spy - 1264416797670|1|0|statement
>    
>     alter table A drop constraint FK41F7BDC12E 
> p6spy - 1264416797672|0|0|statement
>    
>     drop table A if exists 
> p6spy - 1264416797673|0|0|statement
>    
>     drop table D if exists 
> p6spy - 1264416797674|1|0|statement
>    
>     drop table hibernate_sequences if exists 
> p6spy - 1264416797675|1|0|statement
>    
>     create table A (oid bigint not null, name varchar(255), version integer not null, assSingleD_oid bigint, primary key (oid), unique (name)) 
> p6spy - 1264416797676|0|0|statement
>    
>     create table D (oid bigint not null, version integer not null, primary key (oid)) 
> p6spy - 1264416797678|1|0|statement
>    
>     alter table A add constraint FK41F7BDC12E foreign key (assSingleD_oid) references D 
> p6spy - 1264416797679|1|0|statement
>    
>     create table hibernate_sequences ( sequence_name varchar(255),  sequence_next_hi_value integer )  
> 11:53:17,679  INFO SchemaExport:268 - schema export complete
> 11:53:17,684  INFO UpdateTimestampsCache:57 - starting update timestamps cache at region: org.hibernate.cache.UpdateTimestampsCache
> 11:53:17,686  WARN SingletonEhCacheProvider:92 - Could not find a specific ehcache configuration for cache named [org.hibernate.cache.UpdateTimestampsCache]; using defaults.
> 11:53:17,689  INFO StandardQueryCache:75 - starting query cache at region: org.hibernate.cache.StandardQueryCache
> 11:53:17,690  WARN SingletonEhCacheProvider:92 - Could not find a specific ehcache configuration for cache named [org.hibernate.cache.StandardQueryCache]; using defaults.
> 11:53:17,841 DEBUG ConnectionManager:444 - opening JDBC connection
> p6spy - 1264416797874|6|1|statement
>    
>     select
>         sequence_next_hi_value 
>     from
>         hibernate_sequences 
>     where
>         sequence_name = 'A' 
> p6spy - 1264416797876|0|1|statement
>    
>     insert 
>     into
>         hibernate_sequences
>         (sequence_name, sequence_next_hi_value) 
>     values
>         ('A', 0) 
> p6spy - 1264416797878|0|1|statement
>    
>     update
>         hibernate_sequences 
>     set
>         sequence_next_hi_value = 1 
>     where
>         sequence_next_hi_value = 0 
>         and sequence_name = 'A' 
> p6spy - 1264416797879|0|1|commit||
> p6spy - 1264416797915|0|0|statement
>    
>     insert 
>     into
>         A
>         (assSingleD_oid, name, version, oid) 
>     values
>         ('', 'name1', 0, 1) 
> 11:53:17,919 DEBUG UpdateTimestampsCache:66 - Pre-invalidating space [A]
> p6spy - 1264416797931|0|0|commit||
> 11:53:17,934 DEBUG UpdateTimestampsCache:81 - Invalidating space [A], timestamp: 5179051204337665
> 11:53:17,974 DEBUG StandardQueryCache:127 - checking cached query results in region: org.hibernate.cache.StandardQueryCache
> 11:53:17,975 DEBUG StandardQueryCache:132 - query results were not found in cache
> p6spy - 1264416797978|0|0|statement
>    
>     select
>         this_.oid as oid0_1_,
>         this_.assSingleD_oid as assSingleD4_0_1_,
>         this_.name as name0_1_,
>         this_.version as version0_1_,
>         d2_.oid as oid1_0_,
>         d2_.version as version1_0_ 
>     from
>         A this_ 
>     left outer join
>         D d2_ 
>             on this_.assSingleD_oid=d2_.oid 
>     where
>         (
>             this_.name='name1'
>         ) 
> p6spy - 1264416797981|-1||resultset|oid=1, oid=null
> 11:53:17,985 DEBUG StandardQueryCache:94 - caching query results in region: org.hibernate.cache.StandardQueryCache; timestamp=5179051204546560
> 11:53:17,992 DEBUG StandardQueryCache:127 - checking cached query results in region: org.hibernate.cache.StandardQueryCache
> 11:53:17,993 DEBUG StandardQueryCache:185 - Checking query spaces for up-to-dateness: [A]
> 11:53:17,994 DEBUG UpdateTimestampsCache:102 - [A] last update timestamp: 5179051204337665, result set timestamp: 5179051204546560
> 11:53:17,994 DEBUG StandardQueryCache:142 - returning cached query results
> 11:53:17,997  INFO SessionFactoryImpl:908 - closing

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list