Thanks for the reply. We would go with solution 1. One more thing, which might be a bug. We are using 4.0.1 version. And query of solution 2 is not possible. c3 is cluster key. No option is visible for this cluster key:
1. we cannot use it in set (manager.dsl().update().fromBaseTable().<no option for c3>) 2. even after where clause (only available option is based on id " :manager.dsl().update().fromBaseTable().c4_Set("1").where().id_Eq(id)") in DSL. @Entity(keyspace = "ks" , table="PrimeUser") > public class PrimeUser { > > @PartitionKey > >> @Column("id") >> > private int id; > > @Column("c1") > @Static > private String c1; > > @Column("c2") > @Static > private Boolean c2; > > > @Column("c3") > @ClusteringColumn(1) > private String c3; > > @Column("c4") > private String c4; > > } > > Regards, --------------------------------------------------------------------------------------------------------------------- Atul Saroha *Sr. Software Engineer* *M*: +91 8447784271 *T*: +91 124-415-6069 *EXT*: 12369 Plot # 362, ASF Centre - Tower A, Udyog Vihar, Phase -4, Sector 18, Gurgaon, Haryana 122016, INDIA On Fri, Feb 12, 2016 at 3:01 PM, DuyHai Doan <doanduy...@gmail.com> wrote: > "How could I achieve Delta Update through this ORM where I want to > inserting one row for id,c3,c4 columns only" > > 2 ways: > > 1. Create an empty PrimeUser entity with only id, c3 and c4 values. Use > manager > .crud() > .insert(entity) > .withInsertStrategy(InsertStrategy.NOT_NULL_FIELDS) > .execute() > > This way, Achilles will only extract the 3 columns (id, c3, c4) and > generates only INSERT INTO primeuser(id,c3,c4) VALUES(...) and skip > inserting null values > > > 2. Use the Update DSL > > manager > .dsl() > .update() > .fromBaseTable() > .c3_Set("....") > .c4_Set("....") > .where() > .id_Eq(partitionKey) > .execute() > > > "Since Achilies does not have persistence context like hibernate does, to > track what has beed updated in my java entity and update the change only > though DynamicUpdate anotation." > > This is made on-purpose. Having a proxy to intercept calls to setters and > to track what has been updated would require a "read-before-write" e.g. > load existing data first from Cassandra into the proxy. And > read-before-write is an anti-pattern. > > Optionally, one could create an empty proxy without read-before-write and > intercept only data that have been added to the entity. And this is exactly > what solution 1. does: create a new empty instance of PrimeUser, populate > some values and user insert() with NOT_NULL_FIELDS insert strategy. The > only difference is that Achilles creates INSERT statement instead of UPDATE. > > > > > > On Fri, Feb 12, 2016 at 9:02 AM, Atul Saroha <atul.sar...@snapdeal.com> > wrote: > >> Thanks Doan, >> >> We are now evaluating or nearly finalized to use Achilles. >> >> We are looking for one use case. >> As I mentioned in above for static columns. >> >>> CREATE TABLE IF NOT EXISTS ks.PrimeUser( >>> id int, >>> c1 text STATIC, >>> c2 boolean STATIC, >>> c3 text, >>> c4 text, >>> PRIMARY KEY (id, c3) >>> >> ); >>> >> How could I achieve Delta Update through this ORM where I want to >> inserting one row for id,c3,c4 columns only or updating one row for c4 >> column only against ( id,c3). If I use my entity PrimeUser.java and crud >> insert method then it will insert all columns including static. >> I think that there is only one way which is to use update method of >> dsl/Query API. Since Achilies does not have persistence context like >> hibernate does, to track what has beed updated in my java entity and update >> the change only though DynamicUpdate anotation. >> Or there is something I am missing here?. >> >> Thanks , reply will be highly appreciated >> >> >> >> --------------------------------------------------------------------------------------------------------------------- >> Atul Saroha >> *Sr. Software Engineer* >> *M*: +91 8447784271 *T*: +91 124-415-6069 *EXT*: 12369 >> Plot # 362, ASF Centre - Tower A, Udyog Vihar, >> Phase -4, Sector 18, Gurgaon, Haryana 122016, INDIA >> >> On Tue, Feb 9, 2016 at 8:32 PM, DuyHai Doan <doanduy...@gmail.com> wrote: >> >>> Look at Achilles and how it models Partition key & clustering columns: >>> >>> >>> https://github.com/doanduyhai/Achilles/wiki/5-minutes-Tutorial#clustered-entities >>> >>> >>> >>> On Tue, Feb 9, 2016 at 12:48 PM, Atul Saroha <atul.sar...@snapdeal.com> >>> wrote: >>> >>>> I know the most popular ORM api >>>> >>>> 1. Kundera : >>>> >>>> https://github.com/impetus-opensource/Kundera/wiki/Using-Compound-keys-with-Kundera >>>> 2. Hector (outdated- no longer in development) >>>> >>>> I am bit confuse to model this table into java domain entity structure >>>> >>>> CREATE TABLE IF NOT EXISTS ks.PrimeUser( >>>> id int, >>>> c1 text STATIC, >>>> c2 boolean STATIC, >>>> c3 text, >>>> c4 text, >>>> PRIMARY KEY (id, c3) >>>> ); >>>> >>>> >>>> One way is to create compound key based on id and c3 column as shown >>>> below. >>>> >>>>> @Entity >>>>> @Table(name="PrimeUser", schema="ks") >>>>> public class PrimeUser >>>>> { >>>>> >>>>> @EmbeddedId >>>>> private CompoundKey key; >>>>> >>>>> @Column >>>>> private String c1; >>>>> @Column >>>>> private String c2; >>>>> @Column >>>>> private String c4; >>>>> } >>>>> >>>>> Here key has to be an Embeddable entity: >>>>> >>>>> @Embeddable >>>>> public class CompoundKey >>>>> { >>>>> @Column private int id; >>>>> @Column private String c1; >>>>> } >>>>> >>>>> Then again when we fetch the data based on id only then c1 and c2 will >>>> be duplicated multiple times object, even though they are stored per "id" >>>> basis. c3 column is cluster key and its corresponding value is mapped to >>>> column c4. We avoid using map<c3,c4> here as it will cause performance hit. >>>> Also he have use cases to fetch the data based on (b1,c3) both also. >>>> >>>> Is there any other ORM API which handle such scenario. >>>> >>>> >>>> >>>> >>>> --------------------------------------------------------------------------------------------------------------------- >>>> Atul Saroha >>>> *Sr. Software Engineer* >>>> *M*: +91 8447784271 *T*: +91 124-415-6069 *EXT*: 12369 >>>> Plot # 362, ASF Centre - Tower A, Udyog Vihar, >>>> Phase -4, Sector 18, Gurgaon, Haryana 122016, INDIA >>>> >>> >>> >> >