1

Entity class:

 @Table("user")
    public class UserDAO {

    @PrimaryKey
    private UserKey userKey;

    protected UserDAO () {
        super();
    }

    public UserDAO (UserKey userKey, short version) {
        super();
        this. userKey = userKey;
        this.version = version;
    }
    private short version;

    public UserKey getUserKey () {
        return responseTimeKey;
    }

    public void setUserKey(UserKey responseTimeKey) {
        this. userKey = userKey;
    }



    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        …
        return builder.toString();
    }
}

Composite Key Class:

@PrimaryKeyClass
public class UserKey implements Serializable {

    protected UserKey () {
        super();
    }

    public UserKey (String name, Date date) {
        super();
        this.name = name;       
        this.date = date;

    }


    @PrimaryKeyColumn(ordinal = 0, type = PrimaryKeyType.PARTITIONED)
    private String name;
    @PrimaryKeyColumn(ordinal = 1, type = PrimaryKeyType.CLUSTERED, ordering = Ordering.DESCENDING)
    @CassandraType(type = Name.DATE)
    private Date date;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    @Override
    public int hashCode() {
        …
    }

    @Override
    public boolean equals(Object obj) {
        …
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        …
        return builder.toString();
    }
}

Repository Interface:

public interface UserRepository extends CassandraRepository<UserDAO, UserKey> {
    List<UserDAO> findByUserKeyNameAndUserKeyDate(String name, Date date);

    List<UserDAO> findAll();
}
  • Date is java.util.Date
  • Spring Boot: v2.08
  • Spring Data Cassandra:v2.0.8
  • Cassandra : [cqlsh 5.0.1 | Cassandra 3.11.2 | CQL spec 3.4.4 | Native protocol v4]

I am using application.properties to create autowired connection to Cassandra. When I invoke userRepository.findAll() from controller I get all values with expected Date.

[
{
    "userKey": {
        "name": "abc",
        "date": "2018-05-21T00:00:00.000+0000"
    },
    "version": 1
},
{
    "userKey": {
        "name": "bcd",
        "date": "2018-05-21T00:00:00.000+0000"
    },
    "version": 1
},
{
    "userKey": {
        "name": "def",
        "date": "2018-05-21T00:00:00.000+0000"
    },
    "version": 1
}
]

But when I invoke userRepository.findByUserKeyNameAndUserKeyDate(), below query is triggered and zero results are returned, while passing String name and java.util.Date date as arguments.

Log:

Created query [SELECT * FROM user WHERE name='abc' AND date=1526841000000;]

In cqlsh I get result for

1.  SELECT * FROM user WHERE name='abc' AND date=toTimestamp('2018-05-21');
2.  SELECT * FROM user WHERE name ='abc' AND date='2018-05-21'

Create Table Query:

CREATE TABLE mykeyspace.user (
    name text,
    date timestamp,
    version int,
    PRIMARY KEY (name, date)
) WITH CLUSTERING ORDER BY (date DESC)

Table entries:

name    | date                            | version
---------+---------------------------------+---------
    abc | 2018-05-21 00:00:00.000000+0000 |       1
    bcd | 2018-05-21 00:00:00.000000+0000 |       1
    def | 2018-05-21 00:00:00.000000+0000 |       1

I tried with java.sql.Timestamp - same result; com.datastax.driver.core.LocatDate - findAll() gave cannot convert java.util.Date to LocalDate and findByUserKeyNameAndUserKeyDate() gave same result.

Please help on how to query by date and what am I missing here?

Alfric
  • 35
  • 6
  • 1
    You shouldn't be using `java.util.Date` anyway. –  Jul 09 '18 at 12:31
  • @a_horse_with_no_name I tried with Timestamp, LocalDate and then lastly java.util.Date. – Alfric Jul 09 '18 at 13:16
  • If you could not avoid to use `java.util.Date`, you could try to convert to timestamp. Please, check this question: https://stackoverflow.com/questions/22856931/converting-java-date-to-sql-timestamp – Luciana Oliveira Oct 16 '21 at 02:09

0 Answers0