In the official documentation it says that *-To-One joins in queries should work, but i get weird exceptions (i use HQL). Can somebody confirm if they work or not.
I got a class SysUserGroup that in it has a SysUser class, so when i try to execute:
Code:
Select user FROM SysUserGroup ug INNER JOIN ug.sysUser user
i get this exception:
Code:
java.util.NoSuchElementException
at java.util.ArrayList$Itr.next(Unknown Source)
at org.hibernate.ogm.query.parsing.impl.ParserPropertyHelper.getColumn(ParserPropertyHelper.java:227)
at org.hibernate.ogm.datastore.mongodb.query.parsing.impl.MongoDBPropertyHelper.getColumnName(MongoDBPropertyHelper.java:45)
at org.hibernate.ogm.datastore.mongodb.query.parsing.impl.MongoDBPropertyHelper.getColumnName(MongoDBPropertyHelper.java:36)
at org.hibernate.ogm.datastore.mongodb.query.parsing.impl.MongoDBQueryRendererDelegate.setPropertyPath(MongoDBQueryRendererDelegate.java:69)
at org.hibernate.hql.ast.render.QueryRenderer.valueExpressionPrimary(QueryRenderer.java:7591)
at org.hibernate.hql.ast.render.QueryRenderer.valueExpression(QueryRenderer.java:7113)
at org.hibernate.hql.ast.render.QueryRenderer.rootSelectExpression(QueryRenderer.java:4300)
at org.hibernate.hql.ast.render.QueryRenderer.rootSelectExpression(QueryRenderer.java:4175)
at org.hibernate.hql.ast.render.QueryRenderer.rootSelectExpression(QueryRenderer.java:4124)
at org.hibernate.hql.ast.render.QueryRenderer.selectClause(QueryRenderer.java:3913)
at org.hibernate.hql.ast.render.QueryRenderer.selectFrom(QueryRenderer.java:2713)
at org.hibernate.hql.ast.render.QueryRenderer.querySpec(QueryRenderer.java:2181)
at org.hibernate.hql.ast.render.QueryRenderer.queryExpression(QueryRenderer.java:2105)
at org.hibernate.hql.ast.render.QueryRenderer.queryStatement(QueryRenderer.java:1744)
at org.hibernate.hql.ast.render.QueryRenderer.queryStatementSet(QueryRenderer.java:1657)
at org.hibernate.hql.ast.render.QueryRenderer.statement(QueryRenderer.java:653)
at org.hibernate.hql.ast.spi.QueryRendererProcessor.process(QueryRendererProcessor.java:51)
at org.hibernate.hql.QueryParser.parseQuery(QueryParser.java:82)
at org.hibernate.ogm.datastore.mongodb.query.parsing.impl.MongoDBBasedQueryParserService.parseQuery(MongoDBBasedQueryParserService.java:40)
at org.hibernate.ogm.query.impl.OgmQueryTranslator.getQuery(OgmQueryTranslator.java:169)
at org.hibernate.ogm.query.impl.OgmQueryTranslator.getLoader(OgmQueryTranslator.java:134)
at org.hibernate.ogm.query.impl.OgmQueryTranslator.list(OgmQueryTranslator.java:128)
at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:216)
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1326)
at org.hibernate.internal.QueryImpl.list(QueryImpl.java:87)
at edu.upc.masterthesis.demo.CustomerTest.loadUserAndRoles(CustomerTest.java:365)
and when i try to execute this:
Code:
Select user.firstname, user.lastname FROM SysUserGroup ug INNER JOIN ug.sysUser user
i get this:
Code:
java.lang.UnsupportedOperationException: Selecting associated properties not yet implemented.
at org.hibernate.ogm.datastore.mongodb.query.parsing.impl.MongoDBQueryRendererDelegate.setPropertyPath(MongoDBQueryRendererDelegate.java:88)
at org.hibernate.hql.ast.render.QueryRenderer.valueExpressionPrimary(QueryRenderer.java:7591)
at org.hibernate.hql.ast.render.QueryRenderer.valueExpression(QueryRenderer.java:7113)
at org.hibernate.hql.ast.render.QueryRenderer.rootSelectExpression(QueryRenderer.java:4300)
at org.hibernate.hql.ast.render.QueryRenderer.rootSelectExpression(QueryRenderer.java:4175)
at org.hibernate.hql.ast.render.QueryRenderer.rootSelectExpression(QueryRenderer.java:4124)
at org.hibernate.hql.ast.render.QueryRenderer.selectClause(QueryRenderer.java:3913)
at org.hibernate.hql.ast.render.QueryRenderer.selectFrom(QueryRenderer.java:2713)
at org.hibernate.hql.ast.render.QueryRenderer.querySpec(QueryRenderer.java:2181)
at org.hibernate.hql.ast.render.QueryRenderer.queryExpression(QueryRenderer.java:2105)
at org.hibernate.hql.ast.render.QueryRenderer.queryStatement(QueryRenderer.java:1744)
at org.hibernate.hql.ast.render.QueryRenderer.queryStatementSet(QueryRenderer.java:1657)
at org.hibernate.hql.ast.render.QueryRenderer.statement(QueryRenderer.java:653)
at org.hibernate.hql.ast.spi.QueryRendererProcessor.process(QueryRendererProcessor.java:51)
at org.hibernate.hql.QueryParser.parseQuery(QueryParser.java:82)
at org.hibernate.ogm.datastore.mongodb.query.parsing.impl.MongoDBBasedQueryParserService.parseQuery(MongoDBBasedQueryParserService.java:40)
at org.hibernate.ogm.query.impl.OgmQueryTranslator.getQuery(OgmQueryTranslator.java:169)
at org.hibernate.ogm.query.impl.OgmQueryTranslator.getLoader(OgmQueryTranslator.java:134)
at org.hibernate.ogm.query.impl.OgmQueryTranslator.list(OgmQueryTranslator.java:128)
at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:216)
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1326)
at org.hibernate.internal.QueryImpl.list(QueryImpl.java:87)
at edu.upc.masterthesis.demo.CustomerTest.loadUserAndRoles(CustomerTest.java:365)
This is my POM.xml:
Code:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.hibernate.ogm.demos</groupId>
<artifactId>nosql-with-hibernate-ogm-101-part-1</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>NoSQL with Hibernate OGM 101 - Part 1</name>
<description>Demonstrates how to persist and load some entities</description>
<url>http://hibernate.org/ogm/</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<ogm.version>5.0.1.Final</ogm.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.hibernate.ogm</groupId>
<artifactId>hibernate-ogm-bom</artifactId>
<type>pom</type>
<version>${ogm.version}</version>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- Use this for MongoDB -->
<dependency>
<groupId>org.hibernate.ogm</groupId>
<artifactId>hibernate-ogm-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.jboss.jbossts</groupId>
<artifactId>jbossjta</artifactId>
<version>4.16.6.Final</version>
</dependency>
<!-- Search -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-search</artifactId>
<version>5.5.4.Final</version>
</dependency>
<!-- Testing -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.easytesting</groupId>
<artifactId>fest-assert</artifactId>
<version>1.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
and i build my SessionFactory like this:
Code:
public SessionFactory createSessionFactory(){
SysConnection sysConnection = new SysConnection("MongoDBTest", "nosql", "localhost", "27017", null, null, null, null);
sysConnection.setDataStore("mongodb");
sysConnection.setDatabaseName("airCRMDB");
OgmConfiguration configuration = new OgmConfiguration();
// "org.hibernate.ogm.datastore.mongodb.impl.MongoDBDatastoreProvider"
configuration.setProperty("hibernate.ogm.datastore.provider", sysConnection.getDataStore());
configuration.setProperty("hibernate.ogm.datastore.database", sysConnection.getDatabaseName());
configuration.setProperty("hibernate.ogm.datastore.host", sysConnection.getHost());
configuration.setProperty("hibernate.transaction.coordinator_class", "jta");
configuration.addAnnotatedClass(SysUser.class);
configuration.addAnnotatedClass(SysGroup.class);
configuration.addAnnotatedClass(SysUserGroup.class);
configuration.addAnnotatedClass(SysRight.class);
ServiceRegistry serviceRegistry;
SessionFactory sessionFactory;
serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
return sessionFactory;
}