1

我是Spring的新手,所以请原谅我的基本问题。我正在使用基于 spring 的 cassandra 来执行一些 CRUD 操作。一个简单的插入似乎不起作用,并且想知道是否有人可以指出我做错了什么。以下是我简单地插入时得到的错误

java.lang.IllegalAccessError: tried to access class org.springframework.data.mapping.model.BeanWrapper from class org.springframework.data.cassandra.convert.MappingCassandraConverter
at org.springframework.data.cassandra.convert.MappingCassandraConverter.writeInsertFromObject(MappingCassandraConverter.java:233) ~[spring-data-cassandra-1.2.2.RELEASE.jar:na]
at org.springframework.data.cassandra.convert.MappingCassandraConverter.write(MappingCassandraConverter.java:222) ~[spring-data-cassandra-1.2.2.RELEASE.jar:na]
at org.springframework.data.cassandra.core.CassandraTemplate.createInsertQuery(CassandraTemplate.java:841) ~[spring-data-cassandra-1.2.2.RELEASE.jar:na]
at org.springframework.data.cassandra.core.CassandraTemplate.doInsert(CassandraTemplate.java:640) ~[spring-data-cassandra-1.2.2.RELEASE.jar:na]
at org.springframework.data.cassandra.core.CassandraTemplate.insert(CassandraTemplate.java:238) ~[spring-data-cassandra-1.2.2.RELEASE.jar:na]
at org.springframework.data.cassandra.core.CassandraTemplate.insert(CassandraTemplate.java:233) ~[spring-data-cassandra-1.2.2.RELEASE.jar:na]

这是代码:

@Configuration
@PropertySource(value = { "classpath:cassandra.properties" })
@EnableCassandraRepositories
public class CassandraConfig {

    @Autowired
    private Environment environment;

    @Bean
    public CassandraOperations cassandraTemplate(Session someSession) throws Exception {
         return new CassandraTemplate(someSession);
    }

    @Bean
    public CassandraMappingContext mappingContext() {
        return new BasicCassandraMappingContext();
    }

    @Bean
    public CassandraConverter converter() {
        return new MappingCassandraConverter(mappingContext());
    }}

假设会话有效。这是实际执行写入的代码

@Component
public class SomeQueries {
@Autowired
CassandraOperations cassandraOps;

public void insertCart(Addresses addr){
    cassandraOps.insert(addr);
}
}

这是地址的对象:

    @Data
        @NoArgsConstructor
        @Table(value = "addresses")
        public class Addresses implements Serializable{

            @PrimaryKeyColumn(name = "account_id", ordinal = 0, type = PrimaryKeyType.PARTITIONED)
            private UUID accountId;

            @PrimaryKeyColumn(name = "address_id", ordinal = 1, type = PrimaryKeyType.PARTITIONED)
            private int addressId;

            @PrimaryKeyColumn(name = "is_primary", ordinal = 2, type = PrimaryKeyType.PARTITIONED)
            private boolean isPrimary;

            @Column("name") private String name;
            @Column("creation_date") private Date creationTimestamp;
            @Column("last_modified_date") private Date lastModifiedTimestamp;   

            @Override
            public int hashCode() {
                final int prime = 31;
                int result = 1;
                result = prime * result + ((accountId == null) ? 0 : accountId.hashCode());
                result = prime * result + addressId;
                result = prime * result + ((creationTimestamp == null) ? 0 : creationTimestamp.hashCode());
                result = prime * result + (isPrimary ? 1231 : 1237);
                result = prime * result + ((lastModifiedTimestamp == null) ? 0 : lastModifiedTimestamp.hashCode());
                result = prime * result + ((name == null) ? 0 : name.hashCode());
                return result;
            }

            @Override
            public boolean equals(Object obj) {
                if (this == obj)
                    return true;
                if (obj == null)
                    return false;
                if (getClass() != obj.getClass())
                    return false;
                DeliveryAddresses other = (DeliveryAddresses) obj;
                if (accountId == null) {
                    if (other.accountId != null)
                        return false;
                } else if (!accountId.equals(other.accountId))
                    return false;
else if (!address.equals(other.address))
                    return false;
                if (addressId != other.addressId)
                    return false;
                if (creationTimestamp == null) {
                    if (other.creationTimestamp != null)
                        return false;
                } else if (!creationTimestamp.equals(other.creationTimestamp))
                    return false;
                if (isPrimary != other.isPrimary)
                    return false;
                if (lastModifiedTimestamp == null) {
                    if (other.lastModifiedTimestamp != null)
                        return false;
                } else if (!lastModifiedTimestamp.equals(other.lastModifiedTimestamp))
                    return false;
                if (name == null) {
                    if (other.name != null)
                        return false;
                } else if (!name.equals(other.name))
                    return false;
                return true;
            }
            }

有什么我缺少初始化的吗?

4

1 回答 1

0

BeanWrapper 在 Spring Data Cassandra 1.2.0 中已弃用。版本并在代码中使用 TODO 注释标记为删除,在 Github 上的MappingCassandraConverter BeanWrapper 的最新代码中,它已被删除。

您可以将 Spring Data Cassandra 升级到 1.3.0 版本,BeanWrapper 异常将消失。

于 2015-12-18T16:54:31.110 回答