[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-4838) 2L-Querycache ImmutableNaturalKeyLookup not properly recognized as hasImmutableNaturalId() is called on wrong EntityMetamodel
Guenther Demetz (JIRA)
noreply at atlassian.com
Fri Dec 3 03:05:18 EST 2010
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-4838?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=39270#action_39270 ]
Guenther Demetz commented on HHH-4838:
--------------------------------------
Hi Nicolas,
unfortunately currently I have not the time to test and usually I use not aliases, anyway
I strongly believe your analysis regarding the alias is correct and
consequently my proposed patch has to be enhanced in way that it takes also aliases into consideration.
For the problem with the 'otherAttribute' as misplaced NaturalId indeed
I still think it should be resolved in a separate issue, as it is an issue with minor priority.
Thanks for your attention and effort.
regards
Guenther
> 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