use of org.datanucleus.samples.annotations.one_many.bidir.Farm in project tests by datanucleus.
the class CriteriaStringsTest method testProjectionOnManyToOne.
/**
* Test projection of many-to-one field.
*/
public void testProjectionOnManyToOne() {
EntityManager em = getEM();
EntityTransaction tx = em.getTransaction();
try {
tx.begin();
CriteriaBuilder cb = emf.getCriteriaBuilder();
CriteriaQuery<Farm> crit = cb.createQuery(Farm.class);
Root<Animal> candidate = crit.from(Animal.class);
candidate.alias("a");
Path<Farm> farmPath = candidate.get("farm");
crit.select(farmPath);
// DN extension
assertEquals("Generated JPQL query is incorrect", "SELECT a.farm FROM org.datanucleus.samples.annotations.one_many.bidir.Animal a", crit.toString());
Query q = em.createQuery(crit);
List<Farm> results = q.getResultList();
assertNotNull("Null results returned!", results);
assertEquals("Number of results is incorrect", 3, results.size());
Object result = results.get(0);
assertNotNull(result);
assertTrue("Result is of incorrect type", result instanceof Farm);
tx.rollback();
} finally {
if (tx.isActive()) {
tx.rollback();
}
em.close();
}
}
use of org.datanucleus.samples.annotations.one_many.bidir.Farm in project tests by datanucleus.
the class CriteriaStringsTest method testBasicWithFromJoinOneToMany.
/**
* Test basic generation of query with candidate and alias, and FROM join on 1-N.
*/
public void testBasicWithFromJoinOneToMany() {
EntityManager em = getEM();
EntityTransaction tx = em.getTransaction();
try {
tx.begin();
CriteriaBuilder cb = emf.getCriteriaBuilder();
CriteriaQuery<Farm> crit = cb.createQuery(Farm.class);
Root<Farm> candidate = crit.from(Farm.class);
candidate.alias("f");
crit.select(candidate);
Metamodel model = emf.getMetamodel();
ManagedType farmType = model.managedType(Farm.class);
Attribute animalAttr = farmType.getAttribute("animals");
Join animalJoin = candidate.join((ListAttribute) animalAttr);
animalJoin.alias("a");
Path nameField = animalJoin.get("name");
Predicate nameEquals = cb.equal(nameField, "Woolly Sheep");
crit.where(nameEquals);
// DN extension
assertEquals("Generated JPQL query is incorrect", "SELECT f FROM org.datanucleus.samples.annotations.one_many.bidir.Farm f JOIN f.animals a WHERE (a.name = 'Woolly Sheep')", crit.toString());
Query q = em.createQuery(crit);
List<Farm> results = q.getResultList();
assertNotNull("Null results returned!", results);
assertEquals("Number of results is incorrect", 1, results.size());
Farm farm = (Farm) results.get(0);
assertEquals("Farm is incorrect", "Kiwi Farm", farm.getName());
tx.rollback();
} finally {
if (tx.isActive()) {
tx.rollback();
}
em.close();
}
}
use of org.datanucleus.samples.annotations.one_many.bidir.Farm in project tests by datanucleus.
the class JPQLQueryTest method testProjectionOfManyToOneField.
/**
* Test projection of N-1 field.
*/
public void testProjectionOfManyToOneField() {
try {
EntityManager em = getEM();
EntityTransaction tx = em.getTransaction();
try {
tx.begin();
Farm farm1 = new Farm("High Farm");
Farm farm2 = new Farm("Low Farm");
Animal a1 = new Animal("Dog");
Animal a2 = new Animal("Sheep");
Animal a3 = new Animal("Cow");
farm1.getAnimals().add(a1);
farm1.getAnimals().add(a2);
farm2.getAnimals().add(a3);
a1.setFarm(farm1);
a2.setFarm(farm1);
a3.setFarm(farm2);
em.persist(farm1);
em.persist(farm2);
em.flush();
List results = em.createQuery("SELECT a.farm FROM " + Animal.class.getName() + " a ", Farm.class).getResultList();
assertEquals(3, results.size());
Object result = results.get(0);
assertNotNull(result);
assertTrue("Result is of incorrect type", result instanceof Farm);
tx.rollback();
} finally {
if (tx.isActive()) {
tx.rollback();
}
em.close();
}
} finally {
clean(Farm.class);
clean(Animal.class);
}
}
use of org.datanucleus.samples.annotations.one_many.bidir.Farm in project tests by datanucleus.
the class JPQLQueryTest method testResultAggregate.
/**
* Test for result aggregates.
*/
public void testResultAggregate() {
try {
EntityManager em = getEM();
EntityTransaction tx = em.getTransaction();
try {
tx.begin();
Farm farm1 = new Farm("High Farm");
Farm farm2 = new Farm("Low Farm");
Animal a1 = new Animal("Dog");
Animal a2 = new Animal("Sheep");
Animal a3 = new Animal("Cow");
farm1.getAnimals().add(a1);
farm1.getAnimals().add(a2);
farm2.getAnimals().add(a3);
em.persist(farm1);
em.persist(farm2);
em.flush();
Object result = em.createQuery("SELECT COUNT(F) FROM " + Farm.class.getName() + " F").getSingleResult();
assertTrue(result instanceof Long);
assertEquals(2, ((Long) result).longValue());
tx.rollback();
} finally {
if (tx.isActive()) {
tx.rollback();
}
em.close();
}
} finally {
clean(Farm.class);
clean(Animal.class);
}
}
use of org.datanucleus.samples.annotations.one_many.bidir.Farm in project tests by datanucleus.
the class MetamodelTest method testBasic.
/**
* Test for the list of classes and their basic model info
*/
public void testBasic() {
Metamodel model = emf.getMetamodel();
try {
EntityType<?> animalType = model.entity(Animal.class);
assertNotNull(animalType);
assertEquals("Number of Animal attributes is wrong", 2, animalType.getAttributes().size());
Class idType = animalType.getIdType().getJavaType();
assertEquals(String.class, idType);
try {
// String field (Id)
Attribute attr = animalType.getAttribute("name");
assertNotNull(attr);
assertEquals(attr.getName(), "name");
assertEquals(attr.getJavaType(), String.class);
assertEquals(attr.getJavaMember().getName(), "name");
assertFalse(attr.isCollection());
assertFalse(attr.isAssociation());
assertTrue(attr instanceof SingularAttribute);
assertFalse(((SingularAttribute) attr).isOptional());
assertFalse(((SingularAttribute) attr).isVersion());
} catch (IllegalArgumentException iae) {
fail("Didnt find Attribute for \"name\" field of " + Animal.class.getName());
}
try {
// N-1 field
Attribute attr = animalType.getAttribute("farm");
assertNotNull(attr);
assertEquals(attr.getName(), "farm");
assertEquals(attr.getJavaType(), Farm.class);
assertEquals(attr.getJavaMember().getName(), "farm");
assertFalse(attr.isCollection());
assertTrue(attr.isAssociation());
} catch (IllegalArgumentException iae) {
fail("Didnt find Attribute for \"farm\" field of " + Animal.class.getName());
}
// Supertype should be null
assertNull(animalType.getSupertype());
} catch (IllegalArgumentException iae) {
fail("Didnt find EntityType for " + Animal.class.getName());
}
try {
EntityType<?> farmType = model.entity(Farm.class);
assertNotNull(farmType);
assertEquals("Number of Farm attributes is wrong", 2, farmType.getAttributes().size());
try {
// String field
Attribute attr = farmType.getAttribute("name");
assertNotNull(attr);
assertEquals(attr.getName(), "name");
assertEquals(attr.getJavaType(), String.class);
assertEquals(attr.getJavaMember().getName(), "name");
assertFalse(attr.isCollection());
assertFalse(attr.isAssociation());
} catch (IllegalArgumentException iae) {
fail("Didnt find Attribute for \"name\" field of " + Farm.class.getName());
}
try {
// N-1 field
Attribute attr = farmType.getAttribute("animals");
assertNotNull(attr);
assertEquals(attr.getName(), "animals");
assertEquals(attr.getJavaType(), ArrayList.class);
assertEquals(attr.getJavaMember().getName(), "animals");
assertTrue(attr.isCollection());
assertTrue(attr.isAssociation());
assertTrue("Attribute for animals is not castable to ListAttribute!", attr instanceof ListAttribute);
ListAttribute listAttr = (ListAttribute) attr;
Type elemType = listAttr.getElementType();
assertEquals("Element type is wrong", Animal.class, elemType.getJavaType());
} catch (IllegalArgumentException iae) {
fail("Didnt find Attribute for \"animals\" field of " + Farm.class.getName());
}
} catch (IllegalArgumentException iae) {
fail("Didnt find EntityType for " + Farm.class.getName());
}
}
Aggregations