Java 如何在Spring数据Cassandara中映射UDT(用户定义类型)
我使用的是Spring数据cassandra 1.5.0M1。 我找不到在POJO中映射自定义/UDT类型的方法。 我也看到了这个帖子。但我希望在新版本中增加对UDT类型的支持。 例如,我的Cassandra 3.7DB中有消息UDTJava 如何在Spring数据Cassandara中映射UDT(用户定义类型),java,cassandra,spring-data,spring-data-cassandra,Java,Cassandra,Spring Data,Spring Data Cassandra,我使用的是Spring数据cassandra 1.5.0M1。 我找不到在POJO中映射自定义/UDT类型的方法。 我也看到了这个帖子。但我希望在新版本中增加对UDT类型的支持。 例如,我的Cassandra 3.7DB中有消息UDT CREATE TYPE MESSAGE (reply TEXT, time TIMESTAMP, user TEXT, patient UUID, status INT); 如何在实体POJO类中映射它 @Table("conversations") 公开课对
CREATE TYPE MESSAGE (reply TEXT, time TIMESTAMP, user TEXT, patient UUID, status INT);
如何在实体POJO类中映射它
@Table("conversations")
公开课对话{
@org.springframework.data.cassandra.mapping.PrimaryKey
private PrimaryKey primaryKey = new PrimaryKey();
@Column("status")
private Integer conversationStatus;
@Column("last_update")
private Date lastUpdate;
@Column("name")
private String name;
@Column("messages")
private List<Message> messages = new ArrayList<>();
public UUID getId() {
return primaryKey.id;
}
public void setId(UUID id) {
primaryKey.id = id;
}
public Integer getConversationStatus() {
return conversationStatus;
}
public void setConversationStatus(Integer conversationStatus) {
this.conversationStatus = conversationStatus;
}
public Date getLastUpdate() {
return lastUpdate;
}
public void setLastUpdate(Date lastUpdate) {
this.lastUpdate = lastUpdate;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Message> getMessages() {
return messages;
}
public void setMessages(List<Message> messages) {
this.messages = messages;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (obj == this) {
return true;
}
if (obj.getClass() != getClass()) {
return false;
}
final Conversation rhs = (Conversation) obj;
return new EqualsBuilder()
.append(this.primaryKey.id, rhs.primaryKey.id)
.append(this.conversationStatus, rhs.conversationStatus)
.append(this.lastUpdate, rhs.lastUpdate)
.append(this.name, rhs.name)
.append(this.messages, rhs.messages)
.isEquals();
}
@Override
public int hashCode() {
return new HashCodeBuilder()
.append(primaryKey)
.append(conversationStatus)
.append(lastUpdate)
.append(name)
.append(messages)
.toHashCode();
}
@Override
public String toString() {
return new ToStringBuilder(this)
.append("primaryKey", primaryKey)
.append("conversationStatus", conversationStatus)
.append("lastUpdate", lastUpdate)
.append("name", name)
.append("messages", messages)
.toString();
}
public static final class PrimaryKey implements Serializable {
private static final long serialVersionUID = 4188262171705712608L;
@PrimaryKeyColumn(name = "id", ordinal = 0, type = PrimaryKeyType.PARTITIONED)
private UUID id;
public PrimaryKey() {
}
public PrimaryKey(UUID id) {
this.id = id;
}
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (obj == this) {
return true;
}
if (obj.getClass() != getClass()) {
return false;
}
final PrimaryKey rhs = (PrimaryKey) obj;
return new EqualsBuilder()
.append(this.id, rhs.id)
.isEquals();
}
@Override
public int hashCode() {
return new HashCodeBuilder()
.append(id)
.toHashCode();
}
@Override
public String toString() {
return new ToStringBuilder(this)
.append("id", id)
.toString();
}
}
}
@org.springframework.data.cassandra.mapping.PrimaryKey
private PrimaryKey PrimaryKey=新PrimaryKey();
@栏(“状态”)
私有整数会话状态;
@列(“上次更新”)
私人日期最新更新;
@列(“名称”)
私有字符串名称;
@栏(“消息”)
私有列表消息=新的ArrayList();
公共UUID getId(){
返回primaryKey.id;
}
公共无效设置id(UUID id){
primaryKey.id=id;
}
公共整数getConversationStatus(){
返回会话状态;
}
public void setConversationStatus(整数conversationStatus){
this.conversationStatus=会话状态;
}
公共日期getLastUpdate(){
返回最新更新;
}
公共作废setLastUpdate(日期lastUpdate){
this.lastUpdate=lastUpdate;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共列表getMessages(){
返回消息;
}
公共消息(列出消息){
this.messages=消息;
}
@凌驾
公共布尔等于(对象obj){
if(obj==null){
返回false;
}
如果(obj==此){
返回true;
}
如果(obj.getClass()!=getClass()){
返回false;
}
最终对话rhs=(对话)obj;
返回新的EqualBuilder()
.append(this.primaryKey.id,rhs.primaryKey.id)
.append(this.conversationStatus,rhs.conversationStatus)
.append(this.lastUpdate,rhs.lastUpdate)
.append(this.name,rhs.name)
.append(this.messages、rhs.messages)
.isEquals();
}
@凌驾
公共int hashCode(){
返回新的HashCodeBuilder()
.append(主密钥)
.append(会话状态)
.append(最新更新)
.append(名称)
.append(消息)
.toHashCode();
}
@凌驾
公共字符串toString(){
返回新的ToStringBuilder(此)
.append(“primaryKey”,primaryKey)
.append(“会话状态”,会话状态)
.append(“lastUpdate”,lastUpdate)
.append(“name”,name)
.append(“消息”,消息)
.toString();
}
公共静态最终类PrimaryKey实现可序列化{
私有静态最终长serialVersionUID=4188262171705712608L;
@PrimaryKeyColumn(name=“id”,序号=0,类型=PrimaryKeyType.PARTITIONED)
私有UUID;
公钥{
}
公共主密钥(UUID id){
this.id=id;
}
公共UUID getId(){
返回id;
}
公共无效设置id(UUID id){
this.id=id;
}
@凌驾
公共布尔等于(对象obj){
if(obj==null){
返回false;
}
如果(obj==此){
返回true;
}
如果(obj.getClass()!=getClass()){
返回false;
}
最终主密钥rhs=(主密钥)obj;
返回新的EqualBuilder()
.append(this.id,rhs.id)
.isEquals();
}
@凌驾
公共int hashCode(){
返回新的HashCodeBuilder()
.append(id)
.toHashCode();
}
@凌驾
公共字符串toString(){
返回新的ToStringBuilder(此)
.append(“id”,id)
.toString();
}
}
}
提前感谢。1.5.0.M1不支持此功能,但M2或RC1版本将提供此功能。通过使用
@UserDefinedType
,我们有一个支持UDT映射的开放PR,请查看您是否知道M2或RC1的发布时间?除11月底的Ingalls RC1外()请参见此处的答案:1.5.0.M1不支持此功能,但M2或RC1版本将提供此功能。通过使用@UserDefinedType
,我们有一个支持UDT映射的开放PR,请查看您是否知道M2或RC1的发布时间?除11月底的Ingalls RC1外()请参见此处的答案: