[Hibernate-JIRA] Created: (HHH-7305) NPE in LogicalConnectionImpl when multi tenancy is used without providing a release mode manually
by Christian kalkhoff (JIRA)
NPE in LogicalConnectionImpl when multi tenancy is used without providing a release mode manually
-------------------------------------------------------------------------------------------------
Key: HHH-7305
URL: https://hibernate.onjira.com/browse/HHH-7305
Project: Hibernate ORM
Issue Type: Bug
Components: core
Affects Versions: 4.1.3
Environment: cfg.setProperty(Environment.MULTI_TENANT, MultiTenancyStrategy.DATABASE.name());
Reporter: Christian kalkhoff
Priority: Critical
When multi tenancy is used and hibernate.connection.release_mode is not set, one gets a NPE in LogicalConnectionImpl because it accesses a (non-multi-tenancy)connection provider to determine the release mode.
Stack trace:
java.lang.NullPointerException
at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.determineConnectionReleaseMode(LogicalConnectionImpl.java:119)
at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.<init>(LogicalConnectionImpl.java:100)
at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.<init>(LogicalConnectionImpl.java:82)
at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.<init>(JdbcCoordinatorImpl.java:75)
at org.hibernate.engine.transaction.internal.TransactionCoordinatorImpl.<init>(TransactionCoordinatorImpl.java:87)
at org.hibernate.internal.SessionImpl.<init>(SessionImpl.java:249)
at org.hibernate.internal.SessionFactoryImpl$SessionBuilderImpl.openSession(SessionFactoryImpl.java:1835)
...
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
12 years, 5 months
[Hibernate-JIRA] Created: (HHH-6608) @JoinColumns doesn't work inside an @Embedded member
by Joeri Hendrickx (JIRA)
@JoinColumns doesn't work inside an @Embedded member
----------------------------------------------------
Key: HHH-6608
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-6608
Project: Hibernate Core
Issue Type: Bug
Components: annotations, metamodel
Affects Versions: 4.0.0.CR1, 3.5.6
Environment: Version 3.5.6 and up, no DB
Reporter: Joeri Hendrickx
Attachments: hibernate-embedded-joincolumns.zip
If you use multiple joincolumns on a @ManyToOne or @OneToOne field in an @Embedded class, hibernate will fail when building its metamodel with the following exception:
Exception in thread "main" org.hibernate.MappingException: property [_model_MainEntity_embeddedEntity.referencedEntity] not found on entity [model.ReferencedEntity]
at org.hibernate.mapping.PersistentClass.getRecursiveProperty(PersistentClass.java:379)
at org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:406)
at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:111)
at org.hibernate.cfg.AnnotationConfiguration.processEndOfQueue(AnnotationConfiguration.java:541)
at org.hibernate.cfg.AnnotationConfiguration.processFkSecondPassInOrder(AnnotationConfiguration.java:523)
at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:380)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1377)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
at model.Test.main(Test.java:12)
Caused by: org.hibernate.MappingException: property [_model_MainEntity_embeddedEntity.referencedEntity] not found on entity [model.ReferencedEntity]
at org.hibernate.mapping.PersistentClass.getRecursiveProperty(PersistentClass.java:425)
at org.hibernate.mapping.PersistentClass.getRecursiveProperty(PersistentClass.java:376)
... 8 more
A test case is included. Just run model. Test with the hibernate libraries in the classpath.
I get the impression this is because of the dot in the generated property name. Hibernate generates a synthetic property, named after the FQN of the owning entity (with dots replaces by underscores) appended by and underscore and the name of the property. But properties inside of embedded objects are represented with a dot; when Hibernate later tries to retrieve the same property, it incorrectly interprets this dot as a delimiter, and will look for `_model_MainEntity_embeddedEntity` (in the example above) instead; which it will not find.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
12 years, 5 months
[Hibernate-JIRA] Created: (HHH-7108) @TypeDef doesn't work for enums
by Michael Nascimento Santos (JIRA)
@TypeDef doesn't work for enums
-------------------------------
Key: HHH-7108
URL: https://hibernate.onjira.com/browse/HHH-7108
Project: Hibernate ORM
Issue Type: Bug
Components: core
Affects Versions: 4.1.0
Environment: hibernate-jpa-2.0-api:1.0.1-Final; hibernate-core:4.1.0.Final; hibernate-entitymanager:4.1.0.Final
Reporter: Michael Nascimento Santos
Priority: Critical
@TypeDef is supposed to allow users to define standard types to be used for specific classes. However, due to a bug in implementation, it simply doesn't work for enums.
Enums are implicitly handled by the JPA spec. However, if a @TypeDef is defined for a particular enum, it will never be picked up due to bug in org.hibernate.cfg.annotations.SimpleValueBinder .
This class has a concept of a "explicitType", i.e., a type that was explicitly specified for a property. However, even if @EnumType is not used to annotate a property, method setType(XProperty,XClass) considers the property as annotated with it. Then, when fillSimpleValue() is called as part of second-pass compilation, the ternary in line 344 chooses org.hibernate.type.EnumType instead of the enum FQN, causing any @TypeDef to be ignored.
This behaviour should be fixed by considering a non-annotated enum property as implicitly typed, not explicitly. Then, the resolution order should be changed to explicitType -> returnedClassName -> implicitType. This would preserve default, expected behaviour for regular enums, while allowing @TypeDef to be used for enums as well.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
12 years, 5 months
[Hibernate-JIRA] Created: (HHH-2808) CLONE -Impossible to define caching for a subclass's collection in hibernate.cgf.xml
by Sebastien Blind (JIRA)
CLONE -Impossible to define caching for a subclass's collection in hibernate.cgf.xml
-------------------------------------------------------------------------------------
Key: HHH-2808
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-2808
Project: Hibernate3
Issue Type: Bug
Components: caching (L2)
Affects Versions: 3.2.5
Environment: Hibernate 3.2.5
Sybase
Reporter: Sebastien Blind
Basically, hibernate allows to define <cache usage="transactional"/> inside the subclass mapping, i.e.
<subclass name="SubClass" extends="BaseClass" discriminator-value="xxx">
<bag name="subClassLinks" lazy="false" inverse="true" batch-size="100">
<cache usage="transactional" region="xxx"/>
<key column="xxx" not-null="true"/>
<one-to-many class="xxx"/>
</bag>
<join table="xxx">
</join>
</subclass>
but it's not allowed to do the same using <collection-cache collection="subClass.myCollection" region="xxx" usage="transactional"/>.
It throws:
Exception in thread "main" org.hibernate.MappingException: Cannot cache an unknown collection: subClass.myCollection
at org.hibernate.cfg.Configuration.setCollectionCacheConcurrencyStrategy(Configuration.java:1984)
at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1568)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1534)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1508)
at org.hibernate.cfg.Configuration.configure(Configuration.java:1428)
--
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, 5 months
[Hibernate-JIRA] Created: (HHH-6661) Parent-child self-referencing relationship via link table causes QuerySyntaxException:(table) is not mapped when retrieving previous revisions
by Gerard Krupa (JIRA)
Parent-child self-referencing relationship via link table causes QuerySyntaxException:(table) is not mapped when retrieving previous revisions
----------------------------------------------------------------------------------------------------------------------------------------------
Key: HHH-6661
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-6661
Project: Hibernate Core
Issue Type: Bug
Components: envers
Affects Versions: 3.6.7
Environment: Hibernate 3.6.7.Final, Oracle 11g DB (also reproduced with Derby 10.8.1.2), Spring 3.0.3
Reporter: Gerard Krupa
Attachments: gjkrupa_envers_problem.zip
We have a parent-child relationship set up for an entity using a plain link table. This is annotated with @JoinTable and @AuditJoinTable so there is no entity for the link table itself. The definition looks something like this...
@Entity
@Table(name = "BKG_BKCM_BKG_CMPT")
@Audited
public class BookingComponent implements Serializable {
@ManyToOne(fetch = FetchType.LAZY, optional = true)
@AuditJoinTable(name = "BKG_BKCMR_REL_AUD", inverseJoinColumns = { @JoinColumn(name = "BKCM_ID_PARENT", nullable = true, updatable = false) })
@JoinTable(name = "BKG_BKCMR_REL", joinColumns = { @JoinColumn(name = "BKCM_ID_CHILD", nullable = true, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "BKCM_ID_PARENT", nullable = true, updatable = false) })
private BookingComponent parent;
@OneToMany(mappedBy = "parent")
private List<BookingComponent> children;
}
We've found two issues. Firstly, when we try to retrieve a previous revision of these entities (they in turn are held in a collection in a container entity) using List<>.size() Envers seems to be constructing a JPQL query using the link table's table name which isn't valid JPQL resulting in the following exception:
org.hibernate.hql.ast.QuerySyntaxException: BKG_BKCMR_REL_AUD is not mapped [select new list(ee, e) from BKG_BKCMR_REL_AUD ee, *package-name-omitted*.BookingComponent_AUD e where ee.originalId.BookingComponent_id = e.originalId.id and ee.originalId.children_id = :children_id and e.originalId.rev_id.id <= :revision and ee.originalId.rev_id.id <= :revision and ee.rev_type != :delrevisiontype and e.rev_type != :delrevisiontype and (e.REV_ID_END.id > :revision or e.REV_ID_END is null) and (ee.REV_ID_END.id > :revision or ee.REV_ID_END is null)]
at org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:180)
at org.hibernate.hql.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:111)
at org.hibernate.hql.ast.tree.FromClause.addFromElement(FromClause.java:93)
at org.hibernate.hql.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:327)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3441)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3325)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:733)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:584)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:301)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:244)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:254)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:185)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:124)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1770)
at org.hibernate.envers.entities.mapper.relation.query.TwoEntityQueryGenerator.getQuery(TwoEntityQueryGenerator.java:128)
at org.hibernate.envers.entities.mapper.relation.lazy.initializor.AbstractCollectionInitializor.initialize(AbstractCollectionInitializor.java:62)
at org.hibernate.envers.entities.mapper.relation.lazy.proxy.CollectionProxy.checkInit(CollectionProxy.java:50)
at org.hibernate.envers.entities.mapper.relation.lazy.proxy.CollectionProxy.size(CollectionProxy.java:55)
We've also noticed that the audit entries for the link table have a null REV_ID_END despite there being multiple revisions.
See attached gjkrupa_envers_problem.zip for a test case that demonstrates this issue.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
12 years, 5 months
[Hibernate-JIRA] Created: (HHH-4959) Concurrent HQL parsing blocks on ReflectHelper.classForName()
by Jarl Totland (JIRA)
Concurrent HQL parsing blocks on ReflectHelper.classForName()
-------------------------------------------------------------
Key: HHH-4959
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-4959
Project: Hibernate Core
Issue Type: Improvement
Components: query-hql
Affects Versions: 3.3.2
Environment: DB2
Reporter: Jarl Totland
Priority: Minor
Attachments: ReflectHelper.java
For particularly HQL-heavy applications, concurrency is lost as ReflectHelper.classForName() blithely runs loadClass() for tokens again and again, many of which are not even classes. As loadClass() is synchronized it end up blocking while it generates stacktraces for its exceptions. This goes for both classic and AST parsers.
Because of this blocking our regression tests took over 20 minutes, regardless of number of threads.
Implementing a simple cache from String to Class in ReflectHelper.classForName() reduced this to 3 minutes for eight threads on a dual-core cpu; the bottleneck is now the database as it should be, not lock contention.
The issue was reported earlier in HHH-1810, but dismissed as related to the classic parser only.
We might use HQL in inappropriate ways, but still wouldn't hurt for Hibernate to support this.
Attached is our modified ReflectHelper; modified code is in the classForName()-methods, classForNameInternal(), and the static HashMap<String, Object> classes.
--
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, 5 months