csc*_*can 4 java spring cassandra spring-data spring-data-cassandra
我有以下列族:
@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;
...
}
Run Code Online (Sandbox Code Playgroud)
由存储库存储和访问:
@Repository
public interface RequestEventRepository extends CrudRepository<RequestEvent, LocalDateTime> {
}
Run Code Online (Sandbox Code Playgroud)
不幸的requestEventRepository.findOne(localDate)是抛出异常,可能是因为它返回了多个结果.我怎样才能解决这个问题?此外,如何检索特定日期的所有结果?
您有两个选项来表示Spring Data Cassandra的复合键:
@PrimaryKeyColumn域类型中(像你这样).@PrimaryKeyClass表示主键并将其嵌入域类型中.Spring Data存储库接受单一ID类型.因此,不可能只声明LocalDateTime为id.如果您想坚持@PrimaryKeyColumn使用域类型,请使用MapIdid类型:
@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;
}
public interface RequestEventRepository extends CrudRepository<RequestEvent, MapId> {}
MapId mapId = BasicMapId.id("dayRequested", …).with("dateRequested", …);
RequestEvent loaded = eventRepository.findOne(mapId);
Run Code Online (Sandbox Code Playgroud)
如果您决定将主键表示为值对象,则需要稍微调整域类型:
@PrimaryKeyClass
public class Key implements Serializable {
@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;
}
@Table(value = "request_event")
public class RequestEvent {
@PrimaryKey
private Key key;
}
public interface RequestEventRepository extends CrudRepository<RequestEvent, Key> {}
eventRepository.findOne(new Key(…))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3640 次 |
| 最近记录: |