This is the first time I try something besides "from Users"...
The query runs fine in Eclipses HQL editor
select count(group_.id) from com.invenso.xb.isp.xbadminserver.database.objects.XbActionGroup group_ where group_.xbRole = 14 and group_.xbActionGroup is null
Trying it in code however throws this exception as if it tries to instantiate XbRole.
I can select "from XbRole" without exceptions.
Thanks in advance
Hibernate version:
3.2.6.ga
Mapping documents:
Code:
package com.invenso.xb.isp.xbadminserver.database.objects;
// Generated 19-jun-2008 11:20:25 by Hibernate Tools 3.2.2.GA
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
/**
* XbActionGroup generated by hbm2java
*/
@Entity
@Table(name = "xb_action_group", uniqueConstraints = @UniqueConstraint(columnNames = {
"name", "parent_id", "role_id" }))
public class XbActionGroup implements java.io.Serializable {
private Integer id;
private XbActionGroup xbActionGroup;
private String name;
private String description;
private XbRole xbRole;
private Set<XbActionGroup> xbActionGroups = new HashSet<XbActionGroup>(0);
private Set<XbAction> xbActions = new HashSet<XbAction>(0);
public XbActionGroup() {
}
public XbActionGroup(String name) {
this.name = name;
}
public XbActionGroup(XbActionGroup xbActionGroup, String name,
String description, XbRole role,
Set<XbActionGroup> xbActionGroups, Set<XbAction> xbActions) {
this.xbActionGroup = xbActionGroup;
this.name = name;
this.description = description;
this.xbRole = role;
this.xbActionGroups = xbActionGroups;
this.xbActions = xbActions;
}
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id", unique = true, nullable = false)
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id")
public XbActionGroup getXbActionGroup() {
return this.xbActionGroup;
}
public void setXbActionGroup(XbActionGroup xbActionGroup) {
this.xbActionGroup = xbActionGroup;
}
@Column(name = "name", nullable = false)
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
@Column(name = "description")
public String getDescription() {
return this.description;
}
public void setDescription(String description) {
this.description = description;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "role_id")
public XbRole getXbRole() {
return this.xbRole;
}
public void setXbRole(XbRole xbRole) {
this.xbRole = xbRole;
}
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "xbActionGroup")
public Set<XbActionGroup> getXbActionGroups() {
return this.xbActionGroups;
}
public void setXbActionGroups(Set<XbActionGroup> xbActionGroups) {
this.xbActionGroups = xbActionGroups;
}
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "xbActionGroup")
public Set<XbAction> getXbActions() {
return this.xbActions;
}
public void setXbActions(Set<XbAction> xbActions) {
this.xbActions = xbActions;
}
}
Code between sessionFactory.openSession() and session.close():Code:
Query query = getEntityManager()
.createQuery(
"select count(group_.id) from XbActionGroup group_ where group_.xbRole = ?1 and group_.xbActionGroup is null");
query = query.setParameter(1, role_id);
Object res = query.getSingleResult();
return (Integer) res;
Full stack trace of any exception that occurs:Code:
javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of com.invenso.xb.isp.xbadminserver.database.objects.XbRole.id
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:637)
at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:107)
at com.invenso.xb.isp.xbadminserver.database.ActionRoleManager.getGroupCount(ActionRoleManager.java:694)
at com.invenso.xb.isp.xbadminserver.database.ActionRoleManager.hasChildren(ActionRoleManager.java:722)
at com.invenso.xb.isp.xbadminserver.database.ActionRoleManager.getActions(ActionRoleManager.java:52)
at com.invenso.xb.isp.xbadminserver.qmgr.ActionManager.initialize(ActionManager.java:61)
at com.invenso.xb.isp.xbadminserver.qmgr.ActionManager.<init>(ActionManager.java:19)
at com.invenso.xb.isp.xbadminserver.qmgr.RoleQueueManager.<init>(RoleQueueManager.java:21)
at com.invenso.xb.isp.xbadminserver.qmgr.GlobalQueueManager.initialize(GlobalQueueManager.java:31)
at com.invenso.xb.isp.xbadminserver.AdminServerClass.Initialize(AdminServerClass.java:184)
at com.invenso.xb.isp.xbadminserver.AdminServerClass.main(AdminServerClass.java:278)
Caused by: org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of com.invenso.xb.isp.xbadminserver.database.objects.XbRole.id
at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:171)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:183)
at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:3596)
at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:3312)
at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:181)
at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:218)
at org.hibernate.type.EntityType.getIdentifier(EntityType.java:397)
at org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:87)
at org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:38)
at org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:491)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1563)
at org.hibernate.loader.Loader.doQuery(Loader.java:673)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.doList(Loader.java:2213)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
at org.hibernate.loader.Loader.list(Loader.java:2099)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:81)
... 9 more
Caused by: java.lang.IllegalArgumentException: object is not an instance of declaring class
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:145)
... 30 more
Name and version of the database you are using:MySQL 4
The generated SQL (show_sql=true):select count(xbactiongr0_.id) as col_0_0_ from xb_action_group xbactiongr0_ where xbactiongr0_.role_id=? and (xbactiongr0_.parent_id is null)
Debug level Hibernate log excerpt:Code:
10:11:19,529 [ main] [DEBUG] opened session at timestamp: 12139494794
10:11:19,603 [ main] [DEBUG] parse() - HQL: select count(group_.id) from com.invenso.xb.isp.xbadminserver.database.objects.XbActionGroup group_ where group_.xbRole = ?1 and group_.xbActionGroup is null
10:11:19,626 [ main] [DEBUG] --- HQL AST ---
\-[QUERY] 'query'
+-[SELECT_FROM] 'SELECT_FROM'
| +-[FROM] 'from'
| | \-[RANGE] 'RANGE'
| | +-[DOT] '.'
| | | +-[DOT] '.'
| | | | +-[DOT] '.'
| | | | | +-[DOT] '.'
| | | | | | +-[DOT] '.'
| | | | | | | +-[DOT] '.'
| | | | | | | | +-[DOT] '.'
| | | | | | | | | +-[IDENT] 'com'
| | | | | | | | | \-[IDENT] 'invenso'
| | | | | | | | \-[IDENT] 'xb'
| | | | | | | \-[IDENT] 'isp'
| | | | | | \-[IDENT] 'xbadminserver'
| | | | | \-[IDENT] 'database'
| | | | \-[IDENT] 'objects'
| | | \-[IDENT] 'XbActionGroup'
| | \-[ALIAS] 'group_'
| \-[SELECT] 'select'
| \-[COUNT] 'count'
| \-[DOT] '.'
| +-[IDENT] 'group_'
| \-[IDENT] 'id'
\-[WHERE] 'where'
\-[AND] 'and'
+-[EQ] '='
| +-[DOT] '.'
| | +-[IDENT] 'group_'
| | \-[IDENT] 'xbRole'
| \-[PARAM] '?'
| \-[NUM_INT] '1'
\-[IS_NULL] 'is null'
\-[DOT] '.'
+-[IDENT] 'group_'
\-[IDENT] 'xbActionGroup'
10:11:19,626 [ main] [DEBUG] throwQueryException() : no errors
10:11:19,683 [ main] [DEBUG] select << begin [level=1, statement=select]
10:11:19,706 [ main] [DEBUG] FromClause{level=1} : com.invenso.xb.isp.xbadminserver.database.objects.XbActionGroup (group_) -> xbactiongr0_
10:11:19,709 [ main] [DEBUG] Resolved : group_ -> xbactiongr0_.id
10:11:19,710 [ main] [DEBUG] getDataType() : id -> org.hibernate.type.IntegerType@53f89f
10:11:19,711 [ main] [DEBUG] Resolved : group_.id -> xbactiongr0_.id
10:11:19,731 [ main] [DEBUG] Resolved : group_ -> xbactiongr0_.id
10:11:19,731 [ main] [DEBUG] getDataType() : xbRole -> org.hibernate.type.ManyToOneType(com.invenso.xb.isp.xbadminserver.database.objects.XbRole)
10:11:19,731 [ main] [DEBUG] dereferenceShortcut() : property xbRole in com.invenso.xb.isp.xbadminserver.database.objects.XbActionGroup does not require a join.
10:11:19,731 [ main] [DEBUG] terminal propertyPath = [xbRole]
10:11:19,731 [ main] [DEBUG] Resolved : group_.xbRole -> xbactiongr0_.role_id
10:11:19,740 [ main] [DEBUG] Resolved : group_ -> xbactiongr0_.id
10:11:19,740 [ main] [DEBUG] getDataType() : xbActionGroup -> org.hibernate.type.ManyToOneType(com.invenso.xb.isp.xbadminserver.database.objects.XbActionGroup)
10:11:19,740 [ main] [DEBUG] dereferenceShortcut() : property xbActionGroup in com.invenso.xb.isp.xbadminserver.database.objects.XbActionGroup does not require a join.
10:11:19,740 [ main] [DEBUG] terminal propertyPath = [xbActionGroup]
10:11:19,740 [ main] [DEBUG] Resolved : group_.xbActionGroup -> xbactiongr0_.parent_id
10:11:19,740 [ main] [DEBUG] select : finishing up [level=1, statement=select]
10:11:19,741 [ main] [DEBUG] processQuery() : ( SELECT ( {select clause} ( count ( xbactiongr0_.id xbactiongr0_.id id ) ) ) ( FromClause{level=1} xb_action_group xbactiongr0_ ) ( where ( and ( = ( xbactiongr0_.role_id xbactiongr0_.id xbRole ) ? ) ( is null ( xbactiongr0_.parent_id xbactiongr0_.id xbActionGroup ) ) ) ) )
10:11:19,750 [ main] [DEBUG] Using FROM fragment [xb_action_group xbactiongr0_]
10:11:19,750 [ main] [DEBUG] select >> end [level=1, statement=select]
10:11:19,756 [ main] [DEBUG] --- SQL AST ---
\-[SELECT] QueryNode: 'SELECT' querySpaces (xb_action_group)
+-[SELECT_CLAUSE] SelectClause: '{select clause}'
| +-[COUNT] CountNode: 'count'
| | \-[DOT] DotNode: 'xbactiongr0_.id' {propertyName=id,dereferenceType=4,propertyPath=id,path=group_.id,tableAlias=xbactiongr0_,className=com.invenso.xb.isp.xbadminserver.database.objects.XbActionGroup,classAlias=group_}
| | +-[ALIAS_REF] IdentNode: 'xbactiongr0_.id' {alias=group_, className=com.invenso.xb.isp.xbadminserver.database.objects.XbActionGroup, tableAlias=xbactiongr0_}
| | \-[IDENT] IdentNode: 'id' {originalText=id}
| \-[SELECT_COLUMNS] SqlNode: ' as col_0_0_'
+-[FROM] FromClause: 'from' FromClause{level=1, fromElementCounter=1, fromElements=1, fromElementByClassAlias=[group_], fromElementByTableAlias=[xbactiongr0_], fromElementsByPath=[], collectionJoinFromElementsByPath=[], impliedElements=[]}
| \-[FROM_FRAGMENT] FromElement: 'xb_action_group xbactiongr0_' FromElement{explicit,not a collection join,not a fetch join,fetch non-lazy properties,classAlias=group_,role=null,tableName=xb_action_group,tableAlias=xbactiongr0_,origin=null,colums={,className=com.invenso.xb.isp.xbadminserver.database.objects.XbActionGroup}}
\-[WHERE] SqlNode: 'where'
\-[AND] SqlNode: 'and'
+-[EQ] BinaryLogicOperatorNode: '='
| +-[DOT] DotNode: 'xbactiongr0_.role_id' {propertyName=xbRole,dereferenceType=ROOT_LEVEL,propertyPath=xbRole,path=group_.xbRole,tableAlias=xbactiongr0_,className=com.invenso.xb.isp.xbadminserver.database.objects.XbActionGroup,classAlias=group_}
| | +-[ALIAS_REF] IdentNode: 'xbactiongr0_.id' {alias=group_, className=com.invenso.xb.isp.xbadminserver.database.objects.XbActionGroup, tableAlias=xbactiongr0_}
| | \-[IDENT] IdentNode: 'xbRole' {originalText=xbRole}
| \-[NAMED_PARAM] ParameterNode: '?' {name=1, expectedType=org.hibernate.type.ManyToOneType(com.invenso.xb.isp.xbadminserver.database.objects.XbRole)}
\-[IS_NULL] IsNullLogicOperatorNode: 'is null'
\-[DOT] DotNode: 'xbactiongr0_.parent_id' {propertyName=xbActionGroup,dereferenceType=ROOT_LEVEL,propertyPath=xbActionGroup,path=group_.xbActionGroup,tableAlias=xbactiongr0_,className=com.invenso.xb.isp.xbadminserver.database.objects.XbActionGroup,classAlias=group_}
+-[ALIAS_REF] IdentNode: 'xbactiongr0_.id' {alias=group_, className=com.invenso.xb.isp.xbadminserver.database.objects.XbActionGroup, tableAlias=xbactiongr0_}
\-[IDENT] IdentNode: 'xbActionGroup' {originalText=xbActionGroup}
10:11:19,756 [ main] [DEBUG] throwQueryException() : no errors
10:11:19,768 [ main] [DEBUG] HQL: select count(group_.id) from com.invenso.xb.isp.xbadminserver.database.objects.XbActionGroup group_ where group_.xbRole = ?1 and group_.xbActionGroup is null
10:11:19,768 [ main] [DEBUG] SQL: select count(xbactiongr0_.id) as col_0_0_ from xb_action_group xbactiongr0_ where xbactiongr0_.role_id=? and (xbactiongr0_.parent_id is null)
10:11:19,768 [ main] [DEBUG] throwQueryException() : no errors
10:11:19,797 [ main] [DEBUG] about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
10:11:19,797 [ main] [DEBUG] opening JDBC connection
10:11:19,797 [ main] [DEBUG] trace com.mchange.v2.resourcepool.BasicResourcePool@1c8ad52 [managed: 5, unused: 4, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@114a3c6)
10:11:19,797 [ main] [DEBUG] select count(xbactiongr0_.id) as col_0_0_ from xb_action_group xbactiongr0_ where xbactiongr0_.role_id=? and (xbactiongr0_.parent_id is null)
10:11:19,808 [ main] [DEBUG] cxnStmtMgr.statementSet( com.mysql.jdbc.Connection@1c4bcda ).size(): 1
10:11:19,808 [ main] [DEBUG] checkoutStatement: com.mchange.v2.c3p0.stmt.GlobalMaxOnlyStatementCache stats -- total size: 1; checked out: 1; num connections: 1; num keys: 1
10:11:19,816 [ main] [ERROR] IllegalArgumentException in class: com.invenso.xb.isp.xbadminserver.database.objects.XbRole, getter method of property: id
10:11:19,816 [ main] [DEBUG] about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
10:11:19,816 [ main] [DEBUG] checkinStatement(): com.mchange.v2.c3p0.stmt.GlobalMaxOnlyStatementCache stats -- total size: 1; checked out: 0; num connections: 1; num keys: 1
10:11:19,816 [ main] [DEBUG] aggressively releasing JDBC connection
10:11:19,816 [ main] [DEBUG] releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
10:11:19,818 [ main] [DEBUG] checkinAll(): com.mchange.v2.c3p0.stmt.GlobalMaxOnlyStatementCache stats -- total size: 1; checked out: 0; num connections: 1; num keys: 1
10:11:19,819 [ main] [DEBUG] trace com.mchange.v2.resourcepool.BasicResourcePool@1c8ad52 [managed: 5, unused: 4, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@114a3c6)
10:11:19,819 [com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2] [DEBUG] checkinAll(): com.mchange.v2.c3p0.stmt.GlobalMaxOnlyStatementCache stats -- total size: 1; checked out: 0; num connections: 1; num keys: 1
10:11:19,819 [ main] [DEBUG] aggressively releasing JDBC connection
10:11:19,819 [ main] [DEBUG] mark transaction for rollback