Java tutorial
/* * Copyright (C) 2012 47 Degrees, LLC * http://47deg.com * hello@47deg.com * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.firebrandocm.tests; import org.apache.commons.beanutils.PropertyUtils; import org.firebrandocm.dao.ClassMetadata; import org.firebrandocm.dao.Query; import org.firebrandocm.dao.cql.clauses.Predicate; import org.junit.BeforeClass; import org.junit.Test; import java.io.UnsupportedEncodingException; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.util.*; import static junit.framework.Assert.*; import static junit.framework.Assert.assertEquals; import static org.firebrandocm.dao.cql.QueryBuilder.*; import static org.firebrandocm.dao.cql.QueryBuilder.from; /** * */ public class PersistenceOperationTest extends HectorAbstractTestCase { @BeforeClass public static void init() throws Exception { //initWithClasses(FirstEntity.class, SecondEntity.class, FirstEntityCounter.class); initWithClasses("org.firebrandocm.tests"); } /** * * @return a random string on every call */ private static String rds() { return UUID.randomUUID().toString(); } @Test public void testAutoGeneratedId() { FirstEntity entity = factory.getInstance(FirstEntity.class); factory.persist(entity); assertNotNull(entity.getId()); } @Test public void testCount() { long amount = 5L; for (int i = 0; i < amount; i++) { FirstEntity entity = factory.getInstance(FirstEntity.class); factory.persist(entity); } long count = factory.getSingleResult(Long.class, Query.get(select(count(), from(FirstEntity.class)))); assertEquals(count, amount); } @Test public void testOrder() { int amount = 10; List<FirstEntity> creationOrderedEntities = new ArrayList<FirstEntity>(amount); for (int i = 0; i < amount; i++) { FirstEntity entity = factory.getInstance(FirstEntity.class); factory.persist(entity); creationOrderedEntities.add(entity); } List<FirstEntity> allEntities = factory.getResultList(FirstEntity.class, Query.get(select(allColumns(), from(FirstEntity.class)))); assertEquals(amount, creationOrderedEntities.size()); assertEquals(amount, allEntities.size()); for (int i = 0; i < amount; i++) { FirstEntity entity = creationOrderedEntities.get(i); FirstEntity other = allEntities.get(i); assertEquals(entity, other); } } @Test public void testMappedEntity() { SecondEntity secondEntity = factory.getInstance(SecondEntity.class); factory.persist(secondEntity); FirstEntity entity = factory.getInstance(FirstEntity.class); entity.setMappedEntity(secondEntity); factory.persist(entity); assertNotNull(entity.getId()); assertNotNull(secondEntity.getId()); FirstEntity loadedEntity = factory.get(FirstEntity.class, entity.getId()); assertEquals(secondEntity, loadedEntity.getMappedEntity()); assertEquals(secondEntity.getId(), loadedEntity.getMappedEntity().getId()); } @Test public void testMappedRecursiveEntity() { FirstEntity firstEntity = factory.getInstance(FirstEntity.class); SecondEntity secondEntity = factory.getInstance(SecondEntity.class); factory.persist(firstEntity); factory.persist(secondEntity); firstEntity.setMappedEntity(secondEntity); secondEntity.setMappedFirstEntity(firstEntity); factory.persist(firstEntity); factory.persist(secondEntity); assertEquals(firstEntity, secondEntity.getMappedFirstEntity()); assertEquals(secondEntity, firstEntity.getMappedEntity()); } @Test public void testMappedCollection() { int amount = 5; FirstEntity entity = factory.getInstance(FirstEntity.class); List<SecondEntity> listProperty = new ArrayList<SecondEntity>(); for (int i = 0; i < amount; i++) { SecondEntity secondEntity = factory.getInstance(SecondEntity.class); factory.persist(secondEntity); listProperty.add(secondEntity); } entity.setListProperty(listProperty); factory.persist(entity); FirstEntity loadedEntity = factory.get(FirstEntity.class, entity.getId()); assertNotNull("null list loaded but expected not null", loadedEntity.getListProperty()); assertEquals(amount, loadedEntity.getListProperty().size()); //test loaded equals and order for (int i = 0; i < amount; i++) { assertEquals(entity.getListProperty().get(i), loadedEntity.getListProperty().get(i)); } } @Test public void testEnumProperty() { FirstEntity firstEntity = factory.getInstance(FirstEntity.class); firstEntity.setTestEnum(TestEnum.A); factory.persist(firstEntity); FirstEntity loadedEntity = factory.get(FirstEntity.class, firstEntity.getId()); assertEquals(TestEnum.A, loadedEntity.getTestEnum()); } @Test public void testEmbeddedEntity() { OtherEntity otherEntity = new OtherEntity(); otherEntity.setFirstProperty(rds()); otherEntity.setNullProperty(null); FirstEntity entity = factory.getInstance(FirstEntity.class); entity.setOtherEntity(otherEntity); factory.persist(entity); FirstEntity loadedEntity = factory.get(FirstEntity.class, entity.getId()); assertEquals(otherEntity, loadedEntity.getOtherEntity()); assertNull(loadedEntity.getOtherEntity().getNullProperty()); assertNull(otherEntity.getNullProperty()); } @Test public void testNestedEmbeddedEntity() { OtherEntity otherEntity = new OtherEntity(); otherEntity.setFirstProperty(rds()); otherEntity.setNullProperty(null); ThirdEntity thirdEntity = new ThirdEntity(); thirdEntity.setSomeProperty(rds()); otherEntity.setNestedThirdProperty(thirdEntity); FirstEntity entity = factory.getInstance(FirstEntity.class); entity.setOtherEntity(otherEntity); factory.persist(entity); FirstEntity loadedEntity = factory.get(FirstEntity.class, entity.getId()); assertEquals(otherEntity, loadedEntity.getOtherEntity()); assertEquals(thirdEntity, loadedEntity.getOtherEntity().getNestedThirdProperty()); assertEquals(thirdEntity.getSomeProperty(), loadedEntity.getOtherEntity().getNestedThirdProperty().getSomeProperty()); } @Test public void testCounterIncrease() { long counterInitialValue = 10; long counterIncreaseValue = +2; long afterPersistCounterExpectedValue = +2; long afterPersistCounterIncreaseExpectedValue = 0; FirstEntityCounter entity = new FirstEntityCounter(); entity.setCounterProperty(counterInitialValue); entity.setCounterPropertyIncreaseBy(counterIncreaseValue); factory.persist(entity); assertEquals(afterPersistCounterIncreaseExpectedValue, entity.getCounterPropertyIncreaseBy()); FirstEntityCounter loadedEntity = factory.get(entity.getClass(), entity.getId()); assertEquals(afterPersistCounterExpectedValue, loadedEntity.getCounterProperty()); assertEquals(afterPersistCounterIncreaseExpectedValue, loadedEntity.getCounterPropertyIncreaseBy()); } @Test public void testSerializedObjectColumn() { FirstEntity entity = new FirstEntity(); List<Object> list = Arrays.<Object>asList("1", 2, 3.0, 4L); entity.setListSerializedAsBytes(new LinkedList<Object>(list)); factory.persist(entity); FirstEntity loadedEntity = factory.get(FirstEntity.class, entity.getId()); assertEquals(entity.getListSerializedAsBytes(), loadedEntity.getListSerializedAsBytes()); } @Test public void testColumnEagerAccess() throws NoSuchFieldException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { FirstEntity firstEntity = new FirstEntity(); firstEntity.setDescription(rds()); factory.persist(firstEntity); testPropertyEagerAccess(FirstEntity.class, firstEntity.getId(), "description"); } @Test public void testMappedEntityEagerAccess() throws NoSuchFieldException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { FirstEntity firstEntity = new FirstEntity(); SecondEntity secondEntity = new SecondEntity(); factory.persist(secondEntity); firstEntity.setMappedEntity(secondEntity); factory.persist(firstEntity); testPropertyEagerAccess(FirstEntity.class, firstEntity.getId(), "mappedEntity"); } @Test public void testMappedCollectionEagerAccess() throws NoSuchFieldException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { FirstEntity firstEntity = new FirstEntity(); List<SecondEntity> listProperty = new ArrayList<SecondEntity>(); SecondEntity secondEntity = new SecondEntity(); factory.persist(secondEntity); listProperty.add(secondEntity); firstEntity.setSecondEagerListProperty(listProperty); factory.persist(firstEntity); testPropertyEagerAccess(FirstEntity.class, firstEntity.getId(), "secondEagerListProperty"); } @Test public void testColumnLazyAccess() throws NoSuchFieldException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { FirstEntity firstEntity = new FirstEntity(); firstEntity.setHugeDescription(rds()); factory.persist(firstEntity); testPropertyLazyAccess(FirstEntity.class, firstEntity.getId(), "hugeDescription"); } @Test public void testMappedEntityLazyAccess() throws NoSuchFieldException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { FirstEntity firstEntity = new FirstEntity(); SecondEntity secondEntity = new SecondEntity(); factory.persist(secondEntity); firstEntity.setSecondLazyMappedEntity(secondEntity); factory.persist(firstEntity); testPropertyLazyAccess(FirstEntity.class, firstEntity.getId(), "secondLazyMappedEntity"); } @Test public void testMappedCollectionLazyAccess() throws NoSuchFieldException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { FirstEntity firstEntity = new FirstEntity(); List<SecondEntity> listProperty = new ArrayList<SecondEntity>(); SecondEntity secondEntity = new SecondEntity(); factory.persist(secondEntity); listProperty.add(secondEntity); firstEntity.setListProperty(listProperty); factory.persist(firstEntity); testPropertyLazyAccess(FirstEntity.class, firstEntity.getId(), "listProperty"); } @Test public void testEQByteArrayProperties() throws NoSuchFieldException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, UnsupportedEncodingException { String test = UUID.randomUUID().toString(); FirstEntity firstEntity = new FirstEntity(); firstEntity.setSomeBytes(test.getBytes()); factory.persist(firstEntity); FirstEntity loadedEntity = factory.get(FirstEntity.class, firstEntity.getId()); assertEquals(new String(loadedEntity.getSomeBytes(), "UTF-8"), test); } @Test public void testEQLongIndexedProperty() throws InvocationTargetException, NoSuchMethodException, IllegalAccessException { testIndexedPropertyEQ(FirstEntity.class, new HashMap<String, Object>() { { put("phone", 123412341234L); } }); } @Test public void testEQStringIndexedProperty() throws InvocationTargetException, NoSuchMethodException, IllegalAccessException { testIndexedPropertyEQ(FirstEntity.class, new HashMap<String, Object>() { { put("name", rds()); put("description", "description'quoted"); } }); } @Test public void testEQDoubleIndexedProperty() throws InvocationTargetException, NoSuchMethodException, IllegalAccessException { testIndexedPropertyEQ(FirstEntity.class, new HashMap<String, Object>() { { put("score", 76.98); } }); } @Test public void testRangeLongIndexedProperty() throws InvocationTargetException, NoSuchMethodException, IllegalAccessException { testIndexedPropertyRanges(FirstEntity.class, "phone", 1L, 0L, 2L); } @Test public void testRangeStringIndexedProperty() throws InvocationTargetException, NoSuchMethodException, IllegalAccessException { testIndexedPropertyRanges(FirstEntity.class, "name", "b", "a", "z"); } @Test public void testRangeDoubleIndexedProperty() throws InvocationTargetException, NoSuchMethodException, IllegalAccessException { testIndexedPropertyRanges(FirstEntity.class, "score", 1.0, 0.0, 2.0); } @Test public void testRangeDateIndexedProperty() throws InvocationTargetException, NoSuchMethodException, IllegalAccessException { Date date = new Date(); testIndexedPropertyRanges(FirstEntity.class, "date", date, new Date(date.getTime() - 1000), new Date(date.getTime() + 1000)); } @Test public void testNamedQuery() { assertNotNull(ClassMetadata.getNullSafeNamedQuery(FirstEntity.QUERY_ALL_ENTITIES)); FirstEntity firstEntity = new FirstEntity(); factory.persist(firstEntity); FirstEntity loadedEntity = factory.getSingleResult(FirstEntity.class, Query.get(FirstEntity.QUERY_ALL_ENTITIES)); assertEquals(loadedEntity, firstEntity); } @Test public void testNamedQueryWithParams() { assertNotNull(ClassMetadata.getNullSafeNamedQuery(FirstEntity.QUERY_ALL_ENTITIES_WITH_PARAMS)); final FirstEntity firstEntity = new FirstEntity(); factory.persist(firstEntity); FirstEntity loadedEntity = factory.getSingleResult(FirstEntity.class, Query.get(FirstEntity.QUERY_ALL_ENTITIES_WITH_PARAMS, new HashMap<String, Object>() { { put("key", firstEntity.getId()); } })); assertEquals(loadedEntity, firstEntity); } @Test public void testPrePersistListener() { final FirstEntity firstEntity = new FirstEntity(); factory.persist(firstEntity); assertNotNull(firstEntity.getPrePersistProperty()); } @Test public void testDeletion() { FirstEntity firstEntity = new FirstEntity(); firstEntity.setName(rds()); factory.persist(firstEntity); List<?> results = factory.getResultList(FirstEntity.class, Query.get(select(allColumns(), from(FirstEntity.class)))); assertEquals(1, results.size()); factory.remove(firstEntity); results = factory.getResultList(FirstEntity.class, Query.get(select(allColumns(), from(FirstEntity.class)))); assertEquals(0, results.size()); } @Test public void testMappedCounter() { FirstEntity entity = new FirstEntity(); entity.setName(rds()); factory.persist(entity); FirstEntityCounter counter = new FirstEntityCounter(); factory.persist(counter); SecondEntity secondEntity = new SecondEntity(); factory.persist(secondEntity); entity.setCounter(counter); entity.setMappedEntity(secondEntity); factory.persist(entity); FirstEntity loadedEntity = factory.get(FirstEntity.class, entity.getId()); assertNotNull(loadedEntity.getCounter()); assertEquals(counter, loadedEntity.getCounter()); assertEquals(entity.getCounter(), loadedEntity.getCounter()); } @Test public void testPagination() { //todo implement composite types once supported in CQL in 1.1 for pagination and ordering support via column composite names and wide rows. int amount = 10; int start = 2; int limit = 5; String startKey = null; String endKey = null; List<String> allKeys = new ArrayList<String>(amount); for (int i = 0; i < amount; i++) { FirstEntity entity = new FirstEntity(); factory.persist(entity); if (i == start) { startKey = entity.getId(); } if (i == start + limit - 1) { endKey = entity.getId(); } allKeys.add(entity.getId()); } Query query = Query .get(select(allColumns(), from(FirstEntity.class), where(range(startKey, endKey)), limit(limit))); log.debug(query.getQuery()); List<FirstEntity> results = factory.getResultList(FirstEntity.class, query); assertEquals(limit, results.size()); assertEquals(startKey, results.get(0).getId()); assertEquals(endKey, results.get(results.size() - 1).getId()); query = Query.get(select(allColumns(), from(FirstEntity.class), where(startAt(startKey)), limit(limit))); log.debug(query.getQuery()); results = factory.getResultList(FirstEntity.class, query); assertEquals(limit, results.size()); assertEquals(startKey, results.get(0).getId()); assertEquals(endKey, results.get(results.size() - 1).getId()); } private void testIndexedPropertyEQ(Class<?> entityClass, Map<String, Object> params) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException { Object entity = factory.getInstance(entityClass); List<Predicate> predicates = new ArrayList<Predicate>(); for (Map.Entry<String, Object> entry : params.entrySet()) { String property = entry.getKey(); Object value = entry.getValue(); PropertyUtils.setProperty(entity, property, value); predicates.add(eq(property, value)); } factory.persist(entity); Object loadedEntity = factory.getSingleResult(entityClass, Query.get(select(allColumns(), from(entityClass), where(predicates.toArray(new Predicate[predicates.size()]))))); assertEquals(entity, loadedEntity); } private void testIndexedPropertyRanges(Class<?> entityClass, String property, Object value, Object lesser, Object upper) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException { Object entity = factory.getInstance(entityClass); PropertyUtils.setProperty(entity, property, value); factory.persist(entity); Object loadedEntity = factory.getSingleResult(entityClass, Query.get( select(allColumns(), from(entityClass), where(type(FirstEntity.class), gt(property, lesser))))); assertEquals(entity, loadedEntity); loadedEntity = factory.getSingleResult(entityClass, Query.get( select(allColumns(), from(entityClass), where(type(FirstEntity.class), gte(property, lesser))))); assertEquals(entity, loadedEntity); loadedEntity = factory.getSingleResult(entityClass, Query.get( select(allColumns(), from(entityClass), where(type(FirstEntity.class), gte(property, value))))); assertEquals(entity, loadedEntity); loadedEntity = factory.getSingleResult(entityClass, Query .get(select(allColumns(), from(entityClass), where(type(FirstEntity.class), lt(property, upper))))); assertEquals(entity, loadedEntity); loadedEntity = factory.getSingleResult(entityClass, Query.get( select(allColumns(), from(entityClass), where(type(FirstEntity.class), lte(property, upper))))); assertEquals(entity, loadedEntity); loadedEntity = factory.getSingleResult(entityClass, Query.get( select(allColumns(), from(entityClass), where(type(FirstEntity.class), lte(property, value))))); assertEquals(entity, loadedEntity); loadedEntity = factory.getSingleResult(entityClass, Query.get(select(allColumns(), from(entityClass), where(type(FirstEntity.class), between(property, lesser, upper))))); assertEquals(entity, loadedEntity); } private void testPropertyLazyAccess(Class<?> entityClass, String id, String property) throws NoSuchFieldException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { Object loadedEntity = factory.get(entityClass, id); Field privateField = entityClass.getDeclaredField(property); privateField.setAccessible(true); Object fieldValue = privateField.get(loadedEntity); assertTrue("expected null or size 0 since getter has not been invoked due to lazy loading", isNullPropertyOrEmptyCollection(fieldValue)); Object value = PropertyUtils.getProperty(loadedEntity, property); assertTrue( "expected not null or size > 0 after reading property via getter and property has been lazy loaded", !isNullPropertyOrEmptyCollection(value)); fieldValue = privateField.get(loadedEntity); value = PropertyUtils.getProperty(loadedEntity, property); assertTrue( "expected not null or size > 0 after reading property via getter and property has been lazy loaded", !isNullPropertyOrEmptyCollection(fieldValue)); assertSame("expected same memory reference since collection was already loaded", fieldValue, value); } private void testPropertyEagerAccess(Class<?> entityClass, String id, String property) throws NoSuchFieldException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { Object loadedEntity = factory.get(entityClass, id); Field privateField = entityClass.getDeclaredField(property); privateField.setAccessible(true); Object fieldValue = privateField.get(loadedEntity); assertTrue("expected not null or size > 0 since collection should be eagerly loaded", !isNullPropertyOrEmptyCollection(fieldValue)); Object value = PropertyUtils.getProperty(loadedEntity, property); assertSame("expected same memory reference since collection was already loaded", fieldValue, value); } private static boolean isNullPropertyOrEmptyCollection(Object value) { boolean match = value == null; if (!match) { if (Collection.class.isAssignableFrom(value.getClass())) { match = ((Collection) value).size() == 0; } } return match; } @Test public void testPropertyEquality() { String string = rds(); Date date = new Date(); Long longNumber = 3L; Double score = 99.0; SecondEntity secondEntity = factory.getInstance(SecondEntity.class); factory.persist(secondEntity); FirstEntity entity = factory.getInstance(FirstEntity.class); entity.setName(string); entity.setDate(date); entity.setPhone(longNumber); entity.setScore(score); entity.setMappedEntity(secondEntity); factory.persist(entity); assertNotNull(entity.getId()); FirstEntity loadedEntity = factory.get(FirstEntity.class, entity.getId()); assertEquals(string, loadedEntity.getName()); assertEquals(date, loadedEntity.getDate()); assertEquals(longNumber, loadedEntity.getPhone()); assertEquals(score, loadedEntity.getScore()); assertEquals(secondEntity, loadedEntity.getMappedEntity()); } @Test public void testPersistence() throws Exception { FirstEntity a = factory.getInstance(FirstEntity.class); a.setName(rds()); a.setDescription(rds()); a.setPhone(1L); a.setScore(3.0); a.setDate(new Date()); a.setOtherDate(new Date(a.getDate().getTime() - 1000)); a.setChangedColumnName(rds()); factory.persist(a); //associations OtherEntity c = factory.getInstance(OtherEntity.class); c.setFirstProperty(rds()); ThirdEntity thirdEntity = factory.getInstance(ThirdEntity.class); thirdEntity.setSomeProperty(rds()); FourthEntity fourthEntity = factory.getInstance(FourthEntity.class); fourthEntity.setSomeProperty(rds()); thirdEntity.setFourthEntity(fourthEntity); c.setNestedThirdProperty(thirdEntity); a.setOtherEntity(c); //mapped associations SecondEntity x = factory.getInstance(SecondEntity.class); x.setName(rds()); factory.persist(x); SecondEntity z = factory.getInstance(SecondEntity.class); z.setName(rds()); ThirdEntity embedEntityInRecursiveMappedEntity = new ThirdEntity(); embedEntityInRecursiveMappedEntity.setSomeProperty(rds()); z.setEmbedEntityInRecursiveMappedEntity(embedEntityInRecursiveMappedEntity); x.setRecursiveMapped(z); factory.persist(z); factory.persist(x); a.setMappedEntity(x); factory.persist(a); //log.debug("created id is: " + a.getId()); FirstEntity b = factory.get(FirstEntity.class, a.getId()); assertNotNull(b); assertEquals(b.getId(), a.getId()); assertEquals(b.getName(), a.getName()); assertEquals(b.getDescription(), a.getDescription()); assertEquals(b.getPhone(), a.getPhone()); assertEquals(b.getScore(), a.getScore()); assertEquals(b.getDate(), a.getDate()); assertEquals(b.getOtherDate(), a.getOtherDate()); assertEquals(b.getChangedColumnName(), a.getChangedColumnName()); assertTrue(b.getOtherDate().before(a.getDate())); assertNotNull(b.getOtherEntity()); assertNotNull(a.getOtherEntity()); assertNotNull(a.getMappedEntity()); assertNotNull(b.getMappedEntity()); assertNotNull(a.getMappedEntity().getName()); assertNotNull(b.getMappedEntity().getName()); assertNotNull(a.getMappedEntity().getRecursiveMapped()); assertNotNull(b.getMappedEntity().getRecursiveMapped()); assertNotNull(a.getMappedEntity().getRecursiveMapped().getEmbedEntityInRecursiveMappedEntity()); assertNotNull(b.getMappedEntity().getRecursiveMapped().getEmbedEntityInRecursiveMappedEntity()); assertNotNull( a.getMappedEntity().getRecursiveMapped().getEmbedEntityInRecursiveMappedEntity().getSomeProperty()); assertNotNull( b.getMappedEntity().getRecursiveMapped().getEmbedEntityInRecursiveMappedEntity().getSomeProperty()); assertEquals(b.getMappedEntity().getName(), a.getMappedEntity().getName()); assertNotNull(a.getOtherEntity().getNestedThirdProperty()); assertNotNull(b.getOtherEntity().getNestedThirdProperty()); assertNotNull(a.getOtherEntity().getNestedThirdProperty().getFourthEntity()); assertNotNull(b.getOtherEntity().getNestedThirdProperty().getFourthEntity()); assertNull(a.getOtherEntity().getNestedThirdProperty().getFourthEntityNull()); assertNull(b.getOtherEntity().getNestedThirdProperty().getFourthEntityNull()); assertNotNull(a.getOtherEntity()); assertEquals(b.getOtherEntity(), a.getOtherEntity()); assertEquals(b.getMappedEntity(), a.getMappedEntity()); assertEquals(b.getMappedEntity().getRecursiveMapped(), a.getMappedEntity().getRecursiveMapped()); assertEquals(b.getMappedEntity().getRecursiveMapped().getEmbedEntityInRecursiveMappedEntity(), a.getMappedEntity().getRecursiveMapped().getEmbedEntityInRecursiveMappedEntity()); assertEquals( b.getMappedEntity().getRecursiveMapped().getEmbedEntityInRecursiveMappedEntity().getSomeProperty(), a.getMappedEntity().getRecursiveMapped().getEmbedEntityInRecursiveMappedEntity().getSomeProperty()); assertEquals(b.getMappedEntity().getId(), x.getId()); assertEquals(b.getOtherEntity().getNestedThirdProperty(), a.getOtherEntity().getNestedThirdProperty()); assertEquals(b.getOtherEntity().getNestedThirdProperty().getFourthEntity(), a.getOtherEntity().getNestedThirdProperty().getFourthEntity()); assertEquals(b, a); String newName = "nameChanged"; double score = 99.0; factory.executeQuery(Integer.class, Query.get(update(columnFamily("FirstEntity"), set(assign("name", newName), assign("score", score)), where(keyIn(a.getId()))))); FirstEntity loadedAfterUpdate = factory.get(FirstEntity.class, a.getId()); assertEquals(newName, loadedAfterUpdate.getName()); assertEquals(score, loadedAfterUpdate.getScore()); List<FirstEntity> results = factory.getResultList(FirstEntity.class, Query.get(select(allColumns(), from("FirstEntity")))); assertEquals(1, results.size()); } }