[Hibernate-JIRA] Closed: (HHH-1304) better handling of borrowed connections in non-ON_CLOSE release semantics
by Steve Ebersole (JIRA)
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-1304?page=c... ]
Steve Ebersole closed HHH-1304.
-------------------------------
Closing stale resolved issues
> better handling of borrowed connections in non-ON_CLOSE release semantics
> -------------------------------------------------------------------------
>
> Key: HHH-1304
> URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-1304
> Project: Hibernate Core
> Issue Type: Improvement
> Components: core
> Reporter: Steve Ebersole
> Assignee: Steve Ebersole
> Fix For: 3.1.1
>
>
> Currently, whenever a connection is borrowed via Session.connection(), a new connection (or handle) is returned in the case of aggressive-release. It is then the responsibility of the borrower to close that connection after they are finished with it. However, this is tedious since the behavior is different depending on the connection release mode being used.
> However, it is possible to have Hibernate handle this uniformly in any of the release-modes by proxying the connection returned from Session.connection() such that all requests on this borrowed connection are tunneled back into JDBCContext (as always, user-supplied connections are handled differently ;)
> I have this implemented and working locally. The only remaining question is what the semantics of these proxies should be when the transaction associated to the JDBCContext to which the proxy is associated should be. There are two likely possibilities:
> 1) Leave the proxy in a usable state with the express contract that subsequent invocations would occur in the new transaction (if one, or occur non-transactionally if not); potentially even on a new connection
> 2) Render the proxy unusable after said transaction completes.
> Currently #1 is chosen.
--
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
15 years
[Hibernate-JIRA] Closed: (HHH-1534) Class hierarchy per table without discriminators / ignore subclass type and values
by Steve Ebersole (JIRA)
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-1534?page=c... ]
Steve Ebersole closed HHH-1534.
-------------------------------
Closing stale resolved issues
> Class hierarchy per table without discriminators / ignore subclass type and values
> ----------------------------------------------------------------------------------
>
> Key: HHH-1534
> URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-1534
> Project: Hibernate Core
> Issue Type: New Feature
> Affects Versions: 3.1
> Reporter: Mattias Jiderhamn
> Priority: Minor
>
> I would like to see the ability of mapping a class hierarchy to a single table without any discriminators. That is, only the values of the mapped superclass are persisted and when the entity is loaded from database, it will have the type of the superclass.
> Example:
> class Foo {
>
> int a;
>
> int b;
> }
> class SubFoo extends Foo {
> int c;
>
> int d;
> }
> In this case, I want to be able to instantiate SubFoo, set the values of a, b, c and d, store the SubFoo and later retreive it as a Foo (not only refereced by a Foo pointer, but actually being a Foo instance).
> I do not wish to persist c and d, since they are only used for calculating a and b when the instance is first created.
> I can achieve this by having a separate, identical mapping for each class, but as there are lots of properties and collections it will be hard to maintain.
--
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
15 years
[Hibernate-JIRA] Closed: (HHH-1030) No join clause for implied from element in AST query parser
by Steve Ebersole (JIRA)
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-1030?page=c... ]
Steve Ebersole closed HHH-1030.
-------------------------------
Closing stale resolved issues
> No join clause for implied from element in AST query parser
> -----------------------------------------------------------
>
> Key: HHH-1030
> URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-1030
> Project: Hibernate Core
> Issue Type: Bug
> Components: core
> Affects Versions: 3.1 rc 1
> Environment: 3.1 rc 1
> MS SQL Server 8.00.760
> Reporter: Assaf Urieli
> Attachments: aplikaterm.hbm.zip
>
>
> When migrating from Hibernate2 to Hibernate3, the following HQL:
> HQL: SELECT term.id, term.textDB, conformity.lastUpdateDate, conformity.sourceTerm.id, conformity.sourceTerm.textDB FROM com.joliciel.aplikaterm.domain.TermImpl AS term JOIN term.conformityDB as conformity JOIN conformity.submittedBy AS submittedBy,com.joliciel.aplikaterm.domain.OrganisationLevelCheckerImpl as organisationLevelChecker WHERE conformity.statusDB = :status AND submittedBy.organisation = organisationLevelChecker.organisation AND submittedBy != organisationLevelChecker AND NOT EXISTS (FROM com.joliciel.aplikaterm.domain.ConformityCheckerImpl AS conformityChecker WHERE conformityChecker.user.id=submittedBy.id) AND organisationLevelChecker.user = :pendingCheckBy ORDER BY conformity.lastUpdateDate
> Gets translated as:
> select termimpl0_.idTerme as col_0_0_, termimpl0_.texte as col_1_0_, conformity1_.dateModification as col_2_0_, conformity1_.idTerme_dOrigine as col_3_0_, termimpl4_.texte as col_4_0_ from Terme termimpl0_ inner join Conformite conformity1_ on termimpl0_.idTerme=conformity1_.idTerme inner join Utilisateur userimpl2_ on conformity1_.idSoumisPar=userimpl2_.idUtilisateur, Terme termimpl4_, Controlleur organisati3_ where organisati3_.typeDeControlleur='O' and conformity1_.statut=? and userimpl2_.idOrganisation=organisati3_.idOrganisation and userimpl2_.idUtilisateur<>organisati3_.idControlleur and not (exists (select conformity5_.idControlleur from Controlleur conformity5_ where conformity5_.idUtilisateur=userimpl2_.idUtilisateur)) and organisati3_.idUtilisateur=?
> Note no inner join clause on the implied table termimpl4_ (though it is listed in the SQL AST below).
> If I turn on the classic parser, it gets translated correctly as:
> select termimpl0_.idTerme as col_0_0_, termimpl0_.texte as col_1_0_, conformity1_.dateModification as col_2_0_, conformity1_.idTerme_dOrigine as col_3_0_, termimpl5_.texte as col_4_0_ from Terme termimpl0_ inner join Conformite conformity1_ on termimpl0_.idTerme=conformity1_.idTerme inner join Utilisateur userimpl2_ on conformity1_.idSoumisPar=userimpl2_.idUtilisateur, Controlleur organisati3_, Terme termimpl5_ where organisati3_.typeDeControlleur='O' and conformity1_.idTerme_dOrigine=termimpl5_.idTerme and ((conformity1_.statut=? )AND(userimpl2_.idOrganisation=organisati3_.idOrganisation )AND(userimpl2_.idUtilisateur!=organisati3_.idControlleur )AND(NOT EXISTS(select conformity4_.idControlleur from Controlleur conformity4_ where (conformity4_.idUtilisateur=userimpl2_.idUtilisateur )))AND(organisati3_.idUtilisateur=? )) order by conformity1_.dateModification
> Note inner join clause:
> conformity1_.idTerme_dOrigine=termimpl5_.idTerme
> --- HQL AST ---
> \-[QUERY] 'query'
> +-[SELECT_FROM] 'SELECT_FROM'
> | +-[FROM] 'FROM'
> | | +-[RANGE] 'RANGE'
> | | | +-[DOT] '.'
> | | | | +-[DOT] '.'
> | | | | | +-[DOT] '.'
> | | | | | | +-[DOT] '.'
> | | | | | | | +-[IDENT] 'com'
> | | | | | | | \-[IDENT] 'joliciel'
> | | | | | | \-[IDENT] 'aplikaterm'
> | | | | | \-[IDENT] 'domain'
> | | | | \-[IDENT] 'TermImpl'
> | | | \-[ALIAS] 'term'
> | | +-[JOIN] 'JOIN'
> | | | +-[DOT] '.'
> | | | | +-[IDENT] 'term'
> | | | | \-[IDENT] 'conformityDB'
> | | | \-[ALIAS] 'conformity'
> | | +-[JOIN] 'JOIN'
> | | | +-[DOT] '.'
> | | | | +-[IDENT] 'conformity'
> | | | | \-[IDENT] 'submittedBy'
> | | | \-[ALIAS] 'submittedBy'
> | | \-[RANGE] 'RANGE'
> | | +-[DOT] '.'
> | | | +-[DOT] '.'
> | | | | +-[DOT] '.'
> | | | | | +-[DOT] '.'
> | | | | | | +-[IDENT] 'com'
> | | | | | | \-[IDENT] 'joliciel'
> | | | | | \-[IDENT] 'aplikaterm'
> | | | | \-[IDENT] 'domain'
> | | | \-[IDENT] 'OrganisationLevelCheckerImpl'
> | | \-[ALIAS] 'organisationLevelChecker'
> | \-[SELECT] 'SELECT'
> | +-[DOT] '.'
> | | +-[IDENT] 'term'
> | | \-[IDENT] 'id'
> | +-[DOT] '.'
> | | +-[IDENT] 'term'
> | | \-[IDENT] 'textDB'
> | +-[DOT] '.'
> | | +-[IDENT] 'conformity'
> | | \-[IDENT] 'lastUpdateDate'
> | +-[DOT] '.'
> | | +-[DOT] '.'
> | | | +-[IDENT] 'conformity'
> | | | \-[IDENT] 'sourceTerm'
> | | \-[IDENT] 'id'
> | \-[DOT] '.'
> | +-[DOT] '.'
> | | +-[IDENT] 'conformity'
> | | \-[IDENT] 'sourceTerm'
> | \-[IDENT] 'textDB'
> +-[WHERE] 'WHERE'
> | \-[AND] 'AND'
> | +-[AND] 'AND'
> | | +-[AND] 'AND'
> | | | +-[AND] 'AND'
> | | | | +-[EQ] '='
> | | | | | +-[DOT] '.'
> | | | | | | +-[IDENT] 'conformity'
> | | | | | | \-[IDENT] 'statusDB'
> | | | | | \-[COLON] ':'
> | | | | | \-[IDENT] 'status'
> | | | | \-[EQ] '='
> | | | | +-[DOT] '.'
> | | | | | +-[IDENT] 'submittedBy'
> | | | | | \-[IDENT] 'organisation'
> | | | | \-[DOT] '.'
> | | | | +-[IDENT] 'organisationLevelChecker'
> | | | | \-[IDENT] 'organisation'
> | | | \-[NE] '!='
> | | | +-[IDENT] 'submittedBy'
> | | | \-[IDENT] 'organisationLevelChecker'
> | | \-[NOT] 'not'
> | | \-[EXISTS] 'EXISTS'
> | | \-[QUERY] 'query'
> | | +-[SELECT_FROM] 'SELECT_FROM'
> | | | \-[FROM] 'FROM'
> | | | \-[RANGE] 'RANGE'
> | | | +-[DOT] '.'
> | | | | +-[DOT] '.'
> | | | | | +-[DOT] '.'
> | | | | | | +-[DOT] '.'
> | | | | | | | +-[IDENT] 'com'
> | | | | | | | \-[IDENT] 'joliciel'
> | | | | | | \-[IDENT] 'aplikaterm'
> | | | | | \-[IDENT] 'domain'
> | | | | \-[IDENT] 'ConformityCheckerImpl'
> | | | \-[ALIAS] 'conformityChecker'
> | | \-[WHERE] 'WHERE'
> | | \-[EQ] '='
> | | +-[DOT] '.'
> | | | +-[DOT] '.'
> | | | | +-[IDENT] 'conformityChecker'
> | | | | \-[IDENT] 'user'
> | | | \-[IDENT] 'id'
> | | \-[DOT] '.'
> | | +-[IDENT] 'submittedBy'
> | | \-[IDENT] 'id'
> | \-[EQ] '='
> | +-[DOT] '.'
> | | +-[IDENT] 'organisationLevelChecker'
> | | \-[IDENT] 'user'
> | \-[COLON] ':'
> | \-[IDENT] 'pendingCheckBy'
> \-[ORDER] 'ORDER'
> \-[DOT] '.'
> +-[IDENT] 'conformity'
> \-[IDENT] 'lastUpdateDate'
> --- SQL AST ---
> \-[SELECT] QueryNode: 'SELECT' querySpaces (Utilisateur,Controlleur,Conformite,Terme)
> +-[SELECT_CLAUSE] SelectClause: '{select clause}'
> | +-[DOT] DotNode: 'termimpl0_.idTerme' {propertyName=id,dereferenceType=4,propertyPath=id,path=term.id,tableAlias=termimpl0_,className=com.joliciel.aplikaterm.domain.TermImpl,classAlias=term}
> | | +-[ALIAS_REF] IdentNode: 'termimpl0_.idTerme' {alias=term, className=com.joliciel.aplikaterm.domain.TermImpl, tableAlias=termimpl0_}
> | | \-[IDENT] IdentNode: 'id' {originalText=id}
> | +-[SELECT_COLUMNS] SqlNode: ' as col_0_0_'
> | +-[DOT] DotNode: 'termimpl0_.texte' {propertyName=textDB,dereferenceType=4,propertyPath=textDB,path=term.textDB,tableAlias=termimpl0_,className=com.joliciel.aplikaterm.domain.TermImpl,classAlias=term}
> | | +-[ALIAS_REF] IdentNode: 'termimpl0_.idTerme' {alias=term, className=com.joliciel.aplikaterm.domain.TermImpl, tableAlias=termimpl0_}
> | | \-[IDENT] IdentNode: 'textDB' {originalText=textDB}
> | +-[SELECT_COLUMNS] SqlNode: ' as col_1_0_'
> | +-[DOT] DotNode: 'conformity1_.dateModification' {propertyName=lastUpdateDate,dereferenceType=4,propertyPath=lastUpdateDate,path=conformity.lastUpdateDate,tableAlias=conformity1_,className=com.joliciel.aplikaterm.domain.ConformityImpl,classAlias=conformity}
> | | +-[ALIAS_REF] IdentNode: 'conformity1_.idConformite' {alias=conformity, className=com.joliciel.aplikaterm.domain.ConformityImpl, tableAlias=conformity1_}
> | | \-[IDENT] IdentNode: 'lastUpdateDate' {originalText=lastUpdateDate}
> | +-[SELECT_COLUMNS] SqlNode: ' as col_2_0_'
> | +-[DOT] DotNode: 'conformity1_.idTerme_dOrigine' {propertyName=id,dereferenceType=4,propertyPath=sourceTerm.id,path=conformity.sourceTerm.id,tableAlias=conformity1_,className=com.joliciel.aplikaterm.domain.ConformityImpl,classAlias=conformity}
> | | +-[DOT] DotNode: 'conformity1_.idTerme_dOrigine' {propertyName=id,dereferenceType=ROOT_LEVEL,propertyPath=sourceTerm.id,path=conformity.sourceTerm,tableAlias=conformity1_,className=com.joliciel.aplikaterm.domain.ConformityImpl,classAlias=conformity}
> | | | +-[ALIAS_REF] IdentNode: 'conformity1_.idConformite' {alias=conformity, className=com.joliciel.aplikaterm.domain.ConformityImpl, tableAlias=conformity1_}
> | | | \-[IDENT] IdentNode: 'sourceTerm' {originalText=sourceTerm}
> | | \-[IDENT] IdentNode: 'id' {originalText=id}
> | +-[SELECT_COLUMNS] SqlNode: ' as col_3_0_'
> | +-[DOT] DotNode: 'termimpl4_.texte' {propertyName=textDB,dereferenceType=4,propertyPath=textDB,path=conformity.sourceTerm.textDB,tableAlias=termimpl4_,className=com.joliciel.aplikaterm.domain.TermImpl,classAlias=null}
> | | +-[DOT] DotNode: 'conformity1_.idTerme_dOrigine' {propertyName=sourceTerm,dereferenceType=1,propertyPath=sourceTerm,path=conformity.sourceTerm,tableAlias=termimpl4_,className=com.joliciel.aplikaterm.domain.TermImpl,classAlias=null}
> | | | +-[ALIAS_REF] IdentNode: 'conformity1_.idConformite' {alias=conformity, className=com.joliciel.aplikaterm.domain.ConformityImpl, tableAlias=conformity1_}
> | | | \-[IDENT] IdentNode: 'sourceTerm' {originalText=sourceTerm}
> | | \-[IDENT] IdentNode: 'textDB' {originalText=textDB}
> | \-[SELECT_COLUMNS] SqlNode: ' as col_4_0_'
> +-[FROM] FromClause: 'FROM' FromClause{level=1, fromElementCounter=5, fromElements=5, fromElementByClassAlias=[conformity, term, submittedBy, organisationLevelChecker], fromElementByTableAlias=[termimpl4_, userimpl2_, conformity1_, termimpl0_, organisati3_], fromElementsByPath=[conformity.sourceTerm, conformity.submittedBy, term.conformityDB], collectionJoinFromElementsByPath=[], impliedElements=[]}
> | +-[FROM_FRAGMENT] FromElement: 'Terme termimpl0_' FromElement{explicit,not a collection join,not a fetch join,fetch non-lazy properties,classAlias=term,role=null,tableName=Terme,tableAlias=termimpl0_,origin=null,colums={,className=com.joliciel.aplikaterm.domain.TermImpl}}
> | | \-[JOIN_FRAGMENT] FromElement: 'inner join Conformite conformity1_ on termimpl0_.idTerme=conformity1_.idTerme' FromElement{explicit,not a collection join,not a fetch join,fetch non-lazy properties,classAlias=conformity,role=com.joliciel.aplikaterm.domain.TermImpl.conformityDB,tableName=Conformite,tableAlias=conformity1_,origin=Terme termimpl0_,colums={termimpl0_.idTerme ,className=com.joliciel.aplikaterm.domain.ConformityImpl}}
> | | +-[JOIN_FRAGMENT] FromElement: 'inner join Utilisateur userimpl2_ on conformity1_.idSoumisPar=userimpl2_.idUtilisateur' FromElement{explicit,not a collection join,not a fetch join,fetch non-lazy properties,classAlias=submittedBy,role=null,tableName=Utilisateur,tableAlias=userimpl2_,origin=inner join Conformite conformity1_ on termimpl0_.idTerme=conformity1_.idTerme,colums={conformity1_.idSoumisPar ,className=com.joliciel.aplikaterm.domain.UserImpl}}
> | | \-[FROM_FRAGMENT] ImpliedFromElement: 'Terme termimpl4_' ImpliedFromElement{implied,not a collection join,not a fetch join,fetch non-lazy properties,classAlias=null,role=null,tableName=Terme,tableAlias=termimpl4_,origin=inner join Conformite conformity1_ on termimpl0_.idTerme=conformity1_.idTerme,colums={conformity1_.idTerme_dOrigine ,className=com.joliciel.aplikaterm.domain.TermImpl}}
> | \-[FROM_FRAGMENT] FromElement: 'Controlleur organisati3_' FromElement{explicit,not a collection join,not a fetch join,fetch non-lazy properties,classAlias=organisationLevelChecker,role=null,tableName=Controlleur,tableAlias=organisati3_,origin=null,colums={,className=com.joliciel.aplikaterm.domain.OrganisationLevelCheckerImpl}}
> \-[WHERE] SqlNode: 'WHERE'
> +-[FILTERS] SqlNode: '{filter conditions}'
> | \-[SQL_TOKEN] SqlFragment: 'organisati3_.typeDeControlleur='O''
> \-[AND] SqlNode: 'AND'
> +-[AND] SqlNode: 'AND'
> | +-[AND] SqlNode: 'AND'
> | | +-[AND] SqlNode: 'AND'
> | | | +-[EQ] SqlNode: '='
> | | | | +-[DOT] DotNode: 'conformity1_.statut' {propertyName=statusDB,dereferenceType=4,propertyPath=statusDB,path=conformity.statusDB,tableAlias=conformity1_,className=com.joliciel.aplikaterm.domain.ConformityImpl,classAlias=conformity}
> | | | | | +-[ALIAS_REF] IdentNode: 'conformity1_.idConformite' {alias=conformity, className=com.joliciel.aplikaterm.domain.ConformityImpl, tableAlias=conformity1_}
> | | | | | \-[IDENT] IdentNode: 'statusDB' {originalText=statusDB}
> | | | | \-[NAMED_PARAM] ParameterNode: '?'
> | | | \-[EQ] SqlNode: '='
> | | | +-[DOT] DotNode: 'userimpl2_.idOrganisation' {propertyName=organisation,dereferenceType=ROOT_LEVEL,propertyPath=organisation,path=submittedBy.organisation,tableAlias=userimpl2_,className=com.joliciel.aplikaterm.domain.UserImpl,classAlias=submittedBy}
> | | | | +-[ALIAS_REF] IdentNode: 'userimpl2_.idUtilisateur' {alias=submittedBy, className=com.joliciel.aplikaterm.domain.UserImpl, tableAlias=userimpl2_}
> | | | | \-[IDENT] IdentNode: 'organisation' {originalText=organisation}
> | | | \-[DOT] DotNode: 'organisati3_.idOrganisation' {propertyName=organisation,dereferenceType=ROOT_LEVEL,propertyPath=organisation,path=organisationLevelChecker.organisation,tableAlias=organisati3_,className=com.joliciel.aplikaterm.domain.OrganisationLevelCheckerImpl,classAlias=organisationLevelChecker}
> | | | +-[ALIAS_REF] IdentNode: 'organisati3_.idControlleur' {alias=organisationLevelChecker, className=com.joliciel.aplikaterm.domain.OrganisationLevelCheckerImpl, tableAlias=organisati3_}
> | | | \-[IDENT] IdentNode: 'organisation' {originalText=organisation}
> | | \-[NE] SqlNode: '!='
> | | +-[ALIAS_REF] IdentNode: 'userimpl2_.idUtilisateur' {alias=submittedBy, className=com.joliciel.aplikaterm.domain.UserImpl, tableAlias=userimpl2_}
> | | \-[ALIAS_REF] IdentNode: 'organisati3_.idControlleur' {alias=organisationLevelChecker, className=com.joliciel.aplikaterm.domain.OrganisationLevelCheckerImpl, tableAlias=organisati3_}
> | \-[NOT] SqlNode: 'not'
> | \-[EXISTS] SqlNode: 'EXISTS'
> | \-[SELECT] QueryNode: 'SELECT' querySpaces (Utilisateur,Controlleur,Conformite,Terme)
> | +-[SELECT_CLAUSE] SelectClause: '{derived select clause}'
> | | \-[SELECT_EXPR] SelectExpressionImpl: 'conformity5_.idControlleur' {FromElement{explicit,not a collection join,not a fetch join,fetch non-lazy properties,classAlias=conformityChecker,role=null,tableName=Controlleur,tableAlias=conformity5_,origin=null,colums={,className=com.joliciel.aplikaterm.domain.ConformityCheckerImpl}}}
> | +-[FROM] FromClause: 'FROM' FromClause{level=2, fromElementCounter=1, fromElements=1, fromElementByClassAlias=[conformityChecker], fromElementByTableAlias=[conformity5_], fromElementsByPath=[], collectionJoinFromElementsByPath=[], impliedElements=[]}
> | | \-[FROM_FRAGMENT] FromElement: 'Controlleur conformity5_' FromElement{explicit,not a collection join,not a fetch join,fetch non-lazy properties,classAlias=conformityChecker,role=null,tableName=Controlleur,tableAlias=conformity5_,origin=null,colums={,className=com.joliciel.aplikaterm.domain.ConformityCheckerImpl}}
> | \-[WHERE] SqlNode: 'WHERE'
> | \-[EQ] SqlNode: '='
> | +-[DOT] DotNode: 'conformity5_.idUtilisateur' {propertyName=id,dereferenceType=4,propertyPath=user.id,path=conformityChecker.user.id,tableAlias=conformity5_,className=com.joliciel.aplikaterm.domain.ConformityCheckerImpl,classAlias=conformityChecker}
> | | +-[DOT] DotNode: 'conformity5_.idUtilisateur' {propertyName=id,dereferenceType=ROOT_LEVEL,propertyPath=user.id,path=conformityChecker.user,tableAlias=conformity5_,className=com.joliciel.aplikaterm.domain.ConformityCheckerImpl,classAlias=conformityChecker}
> | | | +-[ALIAS_REF] IdentNode: 'conformity5_.idControlleur' {alias=conformityChecker, className=com.joliciel.aplikaterm.domain.ConformityCheckerImpl, tableAlias=conformity5_}
> | | | \-[IDENT] IdentNode: 'user' {originalText=user}
> | | \-[IDENT] IdentNode: 'id' {originalText=id}
> | \-[DOT] DotNode: 'userimpl2_.idUtilisateur' {propertyName=id,dereferenceType=4,propertyPath=id,path=submittedBy.id,tableAlias=userimpl2_,className=com.joliciel.aplikaterm.domain.UserImpl,classAlias=submittedBy}
> | +-[ALIAS_REF] IdentNode: 'userimpl2_.idUtilisateur' {alias=submittedBy, className=com.joliciel.aplikaterm.domain.UserImpl, tableAlias=userimpl2_}
> | \-[IDENT] IdentNode: 'id' {originalText=id}
> \-[EQ] SqlNode: '='
> +-[DOT] DotNode: 'organisati3_.idUtilisateur' {propertyName=user,dereferenceType=ROOT_LEVEL,propertyPath=user,path=organisationLevelChecker.user,tableAlias=organisati3_,className=com.joliciel.aplikaterm.domain.OrganisationLevelCheckerImpl,classAlias=organisationLevelChecker}
> | +-[ALIAS_REF] IdentNode: 'organisati3_.idControlleur' {alias=organisationLevelChecker, className=com.joliciel.aplikaterm.domain.OrganisationLevelCheckerImpl, tableAlias=organisati3_}
> | \-[IDENT] IdentNode: 'user' {originalText=user}
> \-[NAMED_PARAM] ParameterNode: '?'
--
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
15 years
[Hibernate-JIRA] Closed: (HHH-905) $PlaceHolder$ remains in generated SQL when filter is enabled
by Steve Ebersole (JIRA)
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-905?page=co... ]
Steve Ebersole closed HHH-905.
------------------------------
Closing stale resolved issues
> $PlaceHolder$ remains in generated SQL when filter is enabled
> -------------------------------------------------------------
>
> Key: HHH-905
> URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-905
> Project: Hibernate Core
> Issue Type: Bug
> Components: core
> Affects Versions: 3.1 beta 2
> Environment: JDK 1.5.0_03,
> Oracle 10.1.0.3
> Reporter: Fedor Bokov
> Assignee: Steve Ebersole
> Fix For: 3.1 rc 1
>
> Attachments: HHH-905.src.zip
>
>
> When I enable filter on session, Hibernate 3.1b1 & 3.1b2 generate following SQL:
> select folder0_."ID" as ID1_13_, folder0_."sName" as sName3_13_, folder0_."idContentObjectType" as idConten4_13_, folder0_."idOwner" as idOwner5_13_, folder0_."idParent" as idParent6_13_, folder0_."nType" as nType2_13_ from "Folders" folder0_ where (0 = $PlaceHolder$."idOwner" OR :VisibleObjects.userid = $PlaceHolder$."idOwner") and (folder0_."idParent" is null)
> Note those $PlaceHolder$
> Here is mapping of class "Folder" and definition of filter "VisibleObjects":
> <class name="Folder" table="`Folders`" discriminator-value="2" lazy="false">
> <cache usage="read-write"/>
> <id name="id" type="long" unsaved-value="0">
> <column name="`ID`" not-null="true"/>
> <generator class="sequence">
> <param name="sequence">"Folders_ID_seq"</param>
> </generator>
> </id>
> <discriminator column="`nType`"/>
> <property name="name" column="`sName`"/>
> <many-to-one name="contentObjectType" column="`idContentObjectType`" outer-join="false"
> class="com.agi.sputnik.dataproviders.dataprovider1.dataobjects.metadata.ObjectType"/>
> <many-to-one name="owner" column="`idOwner`" class="com.agi.sputnik.dataproviders.dataprovider1.dataobjects.User" cascade="none"/>
> <many-to-one name="parent" class="Folder" column="`idParent`" outer-join="false"/>
> <property name="type" column="`nType`" insert="false" update="false"/>
> <bag name="subFolders" order-by="`sName`" inverse="true">
> <cache usage="read-write"/>
> <key column="`idParent`"/>
> <one-to-many class="Folder"/>
> <filter name="VisibleObjects" condition="(`idOwner` = 0 OR `idOwner` = :userid)" />
> </bag>
> <subclass discriminator-value="0" name="UserFolder">
> <set name="objects" table="`FolderObjects`" lazy="true">
> <cache usage="read-write"/>
> <key column="`idFolder`"/>
> <element type="long" column="`idObject`"/>
> </set>
> </subclass>
> <subclass discriminator-value="3" name="PocketFolder"/>
> <subclass discriminator-value="1" name="ObjectTypeFolder"/>
> <filter name="VisibleObjects" condition="(0 = `idOwner` OR :userid = `idOwner`)" />
> </class>
> <filter-def name="VisibleObjects" >
> <filter-param name="userid" type="long" />
> </filter-def>
> Fragment of code which enables filter and executes query:
> Session hs = getSession();
> hs.enableFilter( "VisibleObjects" ).setParameter( "userid", owner.getId() );
> Query q = hs.createQuery( "FROM Folder obj WHERE obj.parent is null" );
> List<IFolder> objList = q.list();
> I use Oracle9Dialect.
> These filters used to work with 3.0.5, appears to be broken in 3.1.
> Let me know if you need more information...
--
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
15 years