Hi trying to use Astyanax Entity persister. https://github.com/Netflix/astyanax/wiki/Entity-persister
Playing around, so this is all in a JUnit test. Everything seems to work, except when getting the object by id with .get(id). Looks like it fails when trying to create the object to map it back to. * ** @Entity* * class User {* * @Id* * private String id = UUID.randomUUID().toString();* * @Column(name = "firstName")* * private String firstName = "Joe";* * @Column(name = "lastName")* * private String lastName = "Greenawalt";* * @Column(name="age")* * private int age;* * @Column(name = "phone_numbers")* * Map<String, String> phoneNumbers;* * public User(){* * phoneNumbers = new HashMap<String, String>();* * phoneNumbers.put("home", "338-229-4493");* * phoneNumbers.put("work", "757-229-4493");* * }* * .....removing setters and getters.... ** } AstyanaxContext<Keyspace> context = new AstyanaxContext.Builder().withAstyanaxConfiguration(new AstyanaxConfigurationImpl() .setCqlVersion("3.0.0") .setTargetCassandraVersion("1.2") ) //.forCluster("ClusterName") .forKeyspace(KEYSPACE_NAME) .withAstyanaxConfiguration(new AstyanaxConfigurationImpl() .setDiscoveryType(NodeDiscoveryType.RING_DESCRIBE) ) .withConnectionPoolConfiguration(new ConnectionPoolConfigurationImpl("MyConnectionPool") .setPort(9160) .setMaxConnsPerHost(1) .setSeeds("127.0.0.1:9160") ) .withConnectionPoolMonitor(new CountingConnectionPoolMonitor()) .buildKeyspace(ThriftFamilyFactory.getInstance()); context.start(); Keyspace keyspace = context.getClient(); ColumnFamily<String, String> COLUMN_FAMILY = ColumnFamily .newColumnFamily(COLUMN_FAMILY_NAME, StringSerializer.get(), StringSerializer.get()); try{ keyspace.dropColumnFamily(COLUMN_FAMILY); keyspace.dropKeyspace(); } catch (Exception e){ System.out.println("SWALLOWING NON EXISTENT DROP"); } keyspace.createKeyspace(ImmutableMap.<String, Object>builder() .put("strategy_options", ImmutableMap.<String, Object>builder() .put("replication_factor", "1") .build()) .put("strategy_class", "SimpleStrategy") .build() ); assertNotNull(keyspace); keyspace.createColumnFamily(COLUMN_FAMILY, null); assertNotNull(COLUMN_FAMILY); EntityManager<User, String> entityManager = new DefaultEntityManager.Builder<User, String>() .withEntityType(User.class) .withKeyspace(keyspace) .withColumnFamily(COLUMN_FAMILY) .withTTL(3600) // 1 hour .build(); User user = new User(); String getUserId = user.getId(); user.setFirstName("JOHNNY"); entityManager.put(user); user.setAge(40); entityManager.put(user); User newUser = new User(); newUser.setAge(2); entityManager.put(newUser); ColumnList<String> cl = keyspace.prepareQuery(COLUMN_FAMILY).getKey(getUserId).execute().getResult(); Assert.assertEquals(5, cl.size()); Assert.assertEquals(user.getFirstName(), cl.getColumnByName("firstName").getStringValue()); User fetchedUser = entityManager.get(getUserId); assertNotNull(newUser); assertEquals(user, fetchedUser); **I get the following error: * *javax.persistence.PersistenceException: failed to get entity f33605bb-d748-447f-946c-10929753ce4d* * at com.netflix.astyanax.entitystore.DefaultEntityManager.get(DefaultEntityManager.java:227) * * at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)* * at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) * * at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) * * at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) * * at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) * * at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) * * at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) * * at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) * * at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)* * at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) * * at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) * * at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)* * at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)* * at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)* * at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)* * at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)* * at org.junit.runners.ParentRunner.run(ParentRunner.java:309)* * at org.junit.runner.JUnitCore.run(JUnitCore.java:160)* * at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:77) * * at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:195) * * at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:63)* * at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)* * at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) * * at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) * *Caused by: javax.persistence.PersistenceException: failed to construct entity* * at com.netflix.astyanax.entitystore.EntityMapper.constructEntity(EntityMapper.java:162) * * at com.netflix.astyanax.entitystore.DefaultEntityManager.get(DefaultEntityManager.java:223) * * ... 28 more* *Caused by: java.lang.InstantiationException: me.bagz.scratch.ConnectAndCreateTest$1User* * at java.lang.Class.newInstance0(Class.java:359)* * at java.lang.Class.newInstance(Class.java:327)* * at com.netflix.astyanax.entitystore.EntityMapper.constructEntity(EntityMapper.java:149) * * ... 29 more* However, the object gets stored and I can get it with the low level API and the tests prove it. Pretty new to this library and cassandra, so I certainly could be doing something wrong, but I was following the wiki, and also reading the test here: https://github.com/Netflix/astyanax/blob/master/astyanax-entity-mapper/src/test/java/com/netflix/astyanax/entitystore/DefaultEntityManagerTest.java (LINE 234). Any help appreciated. Thanks, Joe