[Hibernate-JIRA] Created: (HHH-7309) Natural-id not cached in shared cache after insert
by Guenther Demetz (JIRA)
Natural-id not cached in shared cache after insert
---------------------------------------------------
Key: HHH-7309
URL: https://hibernate.onjira.com/browse/HHH-7309
Project: Hibernate ORM
Issue Type: Bug
Components: caching (L2), testsuite
Affects Versions: 4.1.3
Environment: EHCache as 2L-cache implementation (or another 2L-cache implementation with default strict READ_WRITE access strategy)
Reporter: Guenther Demetz
Priority: Minor
Problem:
when using a 2L-cache implementation with default strict READ_WRITE access strategy,
then after inserting/updating a new entity and committing, the concerning Natural-id is not cached in shared cache.
Cause:
With strict READ_WRITE access strategy the improvement HHH-7279 "Prevent identical re-cachings in natural-id shared cache",
fails to prevent identical recachings for in-transaction-created entities, because with strict READ_WRITE the actual put is defered to transaction completition.
Recaching of identical natural-id-key, finally leaves the shared cache with valid entry.
Solution description(see following pullrequest):
To prove this in a hibernate matrix testcase, first I needed to enhance org.hibernate.testing.cache.CachingRegionFactory in manner that it also can return strict READ_WRITE as default access strategy, instead to always non-strict READ_WRITE.
Going deeper, I saw that org.hibernate.testing.cache.NonstrictReadWriteNaturalIdRegionAccessStrategy under some aspects was reflecting more a strict than a non-strict strategy,
this I fixed this and had finally convert CachingRegionFactory's default access type to strict READ_WRITE in order to have not a lot of matrix-testcases failing.
Further detail in following pullrequest...
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
12 years, 1 month
[Hibernate-JIRA] Created: (HHH-7155) Cleanup HibernateTypeHelper
by John Verhaeg (JIRA)
Cleanup HibernateTypeHelper
---------------------------
Key: HHH-7155
URL: https://hibernate.onjira.com/browse/HHH-7155
Project: Hibernate ORM
Issue Type: Task
Components: metamodel
Reporter: John Verhaeg
Assignee: John Verhaeg
Fix For: 5.0.0
Need to reduce the duplicate code in that class, as was done with Binder. Most of the methods deal with plural attributes. If it turns out the code reduces to just a couple of methods, and since Binder has been cleaned up to use consistent method names and has very little code for type resolution related to singular attributes, may want to consider once again merging the code back into Binder.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
12 years, 1 month
[Hibernate-JIRA] Created: (HHH-6066) Postgresql can not work with @Lob type
by Steve Ni (JIRA)
Postgresql can not work with @Lob type
--------------------------------------
Key: HHH-6066
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-6066
Project: Hibernate Core
Issue Type: Bug
Components: annotations
Affects Versions: 3.6.1
Environment: Postgresql 8.x and JDBC driver 9.0-801.jdbc4
Reporter: Steve Ni
My application needs compatible with some major database such as Oracle, Mysql and Postgresql. I also use hibernatetool ant task to generate DDL. I use @Type(type="text") for string. Before 3.5 version, everything is OK. However, after 3.5 Oracel uses long instead clob type. As Long is deprecated type and the Oracle JDBC driver also has bug to read Long type with hibernate (Stream closed exception). So I try to use @Lob replaces @Type(type=text). The problem is this annotation doesn't work with postgresql.
Regarding to this issue, I did some research. The better fix could be Oracle use clob instead of Long. There is not good reason use deprecated type...
Here is exception:
org.springframework.dao.DataIntegrityViolationException: could not load an entity: [com.edgenius.core.model.Configuration#7]; nested exception is org.hibernate.exception.DataException: could not load an entity: [com.edgenius.core.model.Configuration#7]
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:639)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)
at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:921)
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:917)
at com.edgenius.core.dao.hibernate.UserDAOHibernate.getUserByName(UserDAOHibernate.java:145)
at com.edgenius.core.dao.hibernate.UserDAOHibernate.loadUserByUsername(UserDAOHibernate.java:192)
at com.edgenius.wiki.security.acegi.TokenBasedRememberMeServices.processAutoLoginCookie(TokenBasedRememberMeServices.java:67)
at org.springframework.security.ui.rememberme.AbstractRememberMeServices.autoLogin(AbstractRememberMeServices.java:85)
at org.springframework.security.ui.rememberme.RememberMeProcessingFilter.doFilterHttp(RememberMeProcessingFilter.java:74)
at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
at org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter.doFilterHttp(SecurityContextHolderAwareRequestFilter.java:91)
at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
at org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:277)
at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
at org.springframework.security.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:89)
at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
at com.edgenius.wiki.security.acegi.CaptchaValidationProcessingFilter.doFilter(CaptchaValidationProcessingFilter.java:76)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
at org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235)
at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
at org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:175)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.edgenius.core.webapp.filter.LocaleFilter.doFilterInternal(LocaleFilter.java:147)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.edgenius.wiki.webapp.filter.InstallFilter.doFilterInternal(InstallFilter.java:50)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
Caused by: org.hibernate.exception.DataException: could not load an entity: [com.edgenius.core.model.Configuration#7]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:102)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.loader.Loader.loadEntity(Loader.java:2041)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:86)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:76)
at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3293)
at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:496)
at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:477)
at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:227)
at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:285)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:152)
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:1090)
at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:1038)
at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:630)
at org.hibernate.type.EntityType.resolve(EntityType.java:438)
at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:139)
at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:982)
at org.hibernate.loader.Loader.doQuery(Loader.java:857)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
at org.hibernate.loader.Loader.doList(Loader.java:2533)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
at org.hibernate.loader.Loader.list(Loader.java:2271)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:452)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1268)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
at org.springframework.orm.hibernate3.HibernateTemplate$30.doInHibernate(HibernateTemplate.java:930)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419)
... 51 more
Caused by: org.postgresql.util.PSQLException: Bad value for type long
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.toLong(AbstractJdbc2ResultSet.java:2796)
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getLong(AbstractJdbc2ResultSet.java:2019)
at org.postgresql.jdbc4.Jdbc4ResultSet.getClob(Jdbc4ResultSet.java:43)
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getClob(AbstractJdbc2ResultSet.java:384)
at org.apache.commons.dbcp.DelegatingResultSet.getClob(DelegatingResultSet.java:568)
at org.apache.commons.dbcp.DelegatingResultSet.getClob(DelegatingResultSet.java:568)
at org.hibernate.type.descriptor.sql.ClobTypeDescriptor$4.doExtract(ClobTypeDescriptor.java:104)
at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:64)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:253)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:249)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:229)
at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:330)
at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2283)
at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1527)
at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1455)
at org.hibernate.loader.Loader.getRow(Loader.java:1355)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:611)
at org.hibernate.loader.Loader.doQuery(Loader.java:829)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
at org.hibernate.loader.Loader.loadEntity(Loader.java:2037)
--
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....
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
12 years, 1 month
[Hibernate-JIRA] Created: (HHH-5585) SubDialect of PostgreSQLDialect to support (@Lob + byte[]) combination
by Justin Sands (JIRA)
SubDialect of PostgreSQLDialect to support (@Lob + byte[]) combination
----------------------------------------------------------------------
Key: HHH-5585
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-5585
Project: Hibernate Core
Issue Type: Patch
Environment: 3.6.0.CR1, postgresql
Reporter: Justin Sands
Attachments: CustomPostgreSQLDialect.zip
>From hibernate 3.5 to 3.6 the annotation combination @Lob + byte[] does not on postgresql work due to idiosyncrasies in the postgresql JDBC driver.
To support this combination, the following dialect variant can be used along with a basic-type override, provided that the application consistently uses the same annotation style (@Lob + byte[]). A similar approach could be used to support using the OID blob type which postgresql provides, although this patch does not address it.
The user must register the basic type override MateralizedVarBinaryBlobType at boot time.
I am unsure exactly where in the distribution this would fit so I have kept it in one package (org.hibernate.dialect.variant).
I have test cases which I could detach from my current project, if the maintainers think this patch is worth including.
--
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....
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
12 years, 1 month
[Hibernate-JIRA] Created: (HSEARCH-1105) Provide callback option to run after completion of MassIndexer
by Marc Schipperheyn (JIRA)
Provide callback option to run after completion of MassIndexer
--------------------------------------------------------------
Key: HSEARCH-1105
URL: https://hibernate.onjira.com/browse/HSEARCH-1105
Project: Hibernate Search
Issue Type: Improvement
Components: massindexer
Affects Versions: 4.1.0.Final, 4.0.0.Final
Reporter: Marc Schipperheyn
Priority: Minor
I often find myself needing to do something after completion of a MassIndexer operation, such as refreshing a cache. Because MassIndexer can be run in a non-blocking async way, there doesn't seem to be a way to detect when it's done. It would be nice to be able to add a callback that would execute on completion of the MassIndexer process.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
12 years, 1 month
[Hibernate-JIRA] Created: (HHH-6433) PostCommitListeners are called during rollback
by Shawn Clowater (JIRA)
PostCommitListeners are called during rollback
----------------------------------------------
Key: HHH-6433
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-6433
Project: Hibernate Core
Issue Type: Bug
Components: core
Affects Versions: 3.6.2
Environment: JDK 1.6u25, Win7, Oracle10
Reporter: Shawn Clowater
EntityActions that are registered as part of transaction completion are still called when the transaction didn't succeed.
As an example, the DeleteEntityAction
{code}
public void doAfterTransactionCompletion(boolean success, SessionImplementor session) throws HibernateException {
if ( getPersister().hasCache() ) {
final CacheKey ck = new CacheKey(
getId(),
getPersister().getIdentifierType(),
getPersister().getRootEntityName(),
getSession().getEntityMode(),
getSession().getFactory()
);
getPersister().getCacheAccessStrategy().unlockItem( ck, lock );
}
postCommitDelete();
}
{code}
The success is false in the event of a rollback so it doesn't update the cache but it still calls the postCommitDelete which triggers the postCommitDelete listeners. I would think this should only occur in the event that the transaction was actually committed.
To add insult to injury the ActionQueue will also add failed actions to the after transaction completion queue and invalidate the query spaces.
{code}
public void execute(Executable executable) {
try {
executable.execute();
}
finally {
registerCleanupActions( executable );
}
}
private void registerCleanupActions(Executable executable) {
beforeTransactionProcesses.register( executable.getBeforeTransactionCompletionProcess() );
if ( session.getFactory().getSettings().isQueryCacheEnabled() ) {
final String[] spaces = (String[]) executable.getPropertySpaces();
afterTransactionProcesses.addSpacesToInvalidate( spaces );
session.getFactory().getUpdateTimestampsCache().preinvalidate( spaces );
}
afterTransactionProcesses.register( executable.getAfterTransactionCompletionProcess() );
}
{code}
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
12 years, 1 month