Skip to content

Commit

Permalink
Fixing tests when using hibernate and fixing nested joins
Browse files Browse the repository at this point in the history
+ Fixing tests when using hibernate
+ Fixing an issue where nested joins fail with an IllegalStateException: Illegal attempt to dereference path source
+ Adding a test case for the nested join
  • Loading branch information
ivelkov committed Aug 15, 2017
1 parent 60d0d77 commit 7b0d722
Show file tree
Hide file tree
Showing 6 changed files with 99 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -213,10 +213,10 @@ public static <T> Path<?> findPropertyPath(String propertyPath, Path startRoot,
classMetadata = metaModel.managedType(associationType);
LOG.log(Level.INFO, "Create a join between {0} and {1}.", new Object[]{previousClass, classMetadata.getJavaType().getName()});

if (root instanceof Join) {
root = root.get(mappedProperty);
} else {
if (root instanceof From) {
root = ((From) root).join(mappedProperty);
} else {
root = root.get(mappedProperty);
}
} else {
LOG.log(Level.INFO, "Create property path for type {0} property {1}.", new Object[]{classMetadata.getJavaType().getName(), mappedProperty});
Expand Down
30 changes: 26 additions & 4 deletions src/test/java/com/github/tennaito/rsql/jpa/JpaVisitorTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@
import com.github.tennaito.rsql.jpa.entity.Course;
import com.github.tennaito.rsql.jpa.entity.CourseDetails;
import com.github.tennaito.rsql.jpa.entity.Department;
import com.github.tennaito.rsql.jpa.entity.ObjTags;
import com.github.tennaito.rsql.jpa.entity.Person;
import com.github.tennaito.rsql.jpa.entity.Tag;
import com.github.tennaito.rsql.jpa.entity.Teacher;
import com.github.tennaito.rsql.jpa.entity.Title;
import com.github.tennaito.rsql.misc.SimpleMapper;
Expand All @@ -50,7 +52,6 @@
import java.util.Set;

import javax.persistence.EntityManager;
import javax.persistence.Persistence;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.From;
import javax.persistence.criteria.Predicate;
Expand Down Expand Up @@ -80,10 +81,10 @@ public class JpaVisitorTest {
@Parameterized.Parameters
public static List<EntityManager[]> data() {
final TestEntityManagerBuilder testEntityManagerBuilder = new TestEntityManagerBuilder();
final EntityManager eclipseEntityManager = Persistence.createEntityManagerFactory("persistenceUnit-eclipse").createEntityManager();
final EntityManager hibernateEntityManager = Persistence.createEntityManagerFactory("persistenceUnit-hibernate").createEntityManager();
final EntityManager eclipseEntityManager = testEntityManagerBuilder.buildEntityManager("persistenceUnit-eclipse");
initialize(eclipseEntityManager);
initialize(hibernateEntityManager);
final EntityManager hibernateEntityManager = testEntityManagerBuilder.buildEntityManager("persistenceUnit-hibernate");
initialize(hibernateEntityManager);
return Arrays.asList(new EntityManager[]{eclipseEntityManager}, new EntityManager[]{ hibernateEntityManager});
}

Expand Down Expand Up @@ -122,11 +123,22 @@ public static void initialize(EntityManager entityManager) {
head.setTitles(titles);
entityManager.persist(head);

Tag tag = new Tag();
tag.setId(1L);
tag.setTag("TestTag");
entityManager.persist(tag);

ObjTags tags = new ObjTags();
tags.setId(1L);
tags.setTags(Arrays.asList(tag));
entityManager.persist(tags);

Department department = new Department();
department.setId(1L);
department.setName("Testing");
department.setCode("MI-MDW");
department.setHead(head);
department.setTags(tags);
entityManager.persist(department);

Teacher teacher = new Teacher();
Expand Down Expand Up @@ -744,4 +756,14 @@ public void testSelectionUsingEmbeddedAssociationField() throws Exception {
List<Course> courses = entityManager.createQuery(query).getResultList();
assertEquals("Testing Course", courses.get(0).getName());
}

@Test
public void testNestedSelection() throws Exception {
Node rootNode = new RSQLParser().parse("tags.tags.tag=in=(TestTag)");
RSQLVisitor<CriteriaQuery<Department>, EntityManager> visitor = new JpaCriteriaQueryVisitor<Department>();
CriteriaQuery<Department> query = rootNode.accept(visitor, entityManager);

List<Department> departments = entityManager.createQuery(query).getResultList();
assertEquals("Testing", departments.get(0).getName());
}
}
10 changes: 10 additions & 0 deletions src/test/java/com/github/tennaito/rsql/jpa/entity/Department.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;

/**
*
Expand All @@ -42,6 +43,8 @@ public class Department extends AbstractTestEntity {
@ManyToOne
private Person head;

@OneToOne
private ObjTags tags;

public String getCode() {
return code;
Expand All @@ -59,4 +62,11 @@ public void setHead(Person head) {
this.head = head;
}

public ObjTags getTags() {
return tags;
}

public void setTags(ObjTags tags) {
this.tags = tags;
}
}
29 changes: 29 additions & 0 deletions src/test/java/com/github/tennaito/rsql/jpa/entity/ObjTags.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/*
* Copyright (c) Axway Software, 2017. All Rights Reserved.
*
*/

package com.github.tennaito.rsql.jpa.entity;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.OneToMany;


@Entity
public class ObjTags extends AbstractTestEntity{

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
private List<Tag> tags;

public List<Tag> getTags() {
return tags;
}

public void setTags(List<Tag> tags) {
this.tags = tags;
}
}
27 changes: 27 additions & 0 deletions src/test/java/com/github/tennaito/rsql/jpa/entity/Tag.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/*
* Copyright (c) Axway Software, 2017. All Rights Reserved.
*
*/

package com.github.tennaito.rsql.jpa.entity;

import javax.persistence.Column;
import javax.persistence.Entity;

/**
* Created by ivelin on 2/24/17.
*/
@Entity
public class Tag extends AbstractTestEntity {

@Column(name = "TAG", nullable = false)
private String tag;

public String getTag() {
return tag;
}

public void setTag(String tag) {
this.tag = tag;
}
}
4 changes: 4 additions & 0 deletions src/test/resources/META-INF/persistence.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@

<persistence-unit name="persistenceUnit-eclipse">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>com.github.tennaito.rsql.jpa.entity.Tag</class>
<class>com.github.tennaito.rsql.jpa.entity.ObjTags</class>
<class>com.github.tennaito.rsql.jpa.entity.Course</class>
<class>com.github.tennaito.rsql.jpa.entity.Department</class>
<class>com.github.tennaito.rsql.jpa.entity.Person</class>
Expand All @@ -28,6 +30,8 @@

<persistence-unit name="persistenceUnit-hibernate">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.github.tennaito.rsql.jpa.entity.Tag</class>
<class>com.github.tennaito.rsql.jpa.entity.ObjTags</class>
<class>com.github.tennaito.rsql.jpa.entity.Course</class>
<class>com.github.tennaito.rsql.jpa.entity.Department</class>
<class>com.github.tennaito.rsql.jpa.entity.Person</class>
Expand Down

0 comments on commit 7b0d722

Please sign in to comment.