Java – spring data Cassandra: how to use composite keys to query tables?

I have the following families:

@Table(value = "request_event")
public class RequestEvent {

    @PrimaryKeyColumn(name = "day_requested",ordinal = 0,type = PrimaryKeyType.PARTITIONED)
    private LocalDate dayRequested;

    @PrimaryKeyColumn(name = "date_requested",ordinal = 1,type = PrimaryKeyType.CLUSTERED,ordering = Ordering.DESCENDING)
    private LocalDateTime dateRequested;

    ...
}

Stored and accessed by the repository:

@Repository
public interface RequestEventRepository extends CrudRepository<RequestEvent,LocalDateTime> {
}

Unfortunately, requesteventrepository Findone (localdate) throws an exception, possibly because it returns multiple results How can I solve this problem? In addition, how do I retrieve all results for a specific date?

Solution

You have two options to represent the composite key of spring data Cassandra:

>Use @ primarykeycolumn in the domain type (just like you). > Use @ primarykeyclass to represent the primary key and embed it in the domain type

The spring data repository accepts a single ID type Therefore, it is impossible to declare only localdatetime as ID. if you want to adhere to @ primarykeycolumn in the domain type, please use mapid as the ID type:

@Table(value = "request_event")
public class RequestEvent {

    @PrimaryKeyColumn(name = "day_requested",type = PrimaryKeyType.PARTITIONED) 
    private LocalDate dayRequested;

    @PrimaryKeyColumn(name = "date_requested",ordering = Ordering.DESCENDING) 
    private LocalDateTime dateRequested;

}

public interface RequestEventRepository extends CrudRepository<RequestEvent,MapId> {}

MapId mapId = BasicMapId.id("dayRequested",…).with("dateRequested",…);

RequestEvent loaded = eventRepository.findOne(mapId);

If you decide to represent the primary key as a value object, you need to adjust the domain type slightly:

@PrimaryKeyClass
public class Key implements Serializable {

    @PrimaryKeyColumn(name = "day_requested",ordering = Ordering.DESCENDING) 
    private LocalDateTime dateRequested;

}

@Table(value = "request_event")
public class RequestEvent {

    @PrimaryKey 
    private Key key;

}

public interface RequestEventRepository extends CrudRepository<RequestEvent,Key> {}

eventRepository.findOne(new Key(…))
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>