CouchBase .NET sdk 使用数据更新插入和 spring framwork findone null

CouchBase .NET sdk use data upsert and spring framwork findone null

Couchbase SDK .NET(Ver:2.2.2) 和 SpringFramework(Ver:1.4.2.RELEASE) 使用

测试用例

  1. .NET 更新插入 -> .NET GetDocument:成功

  2. Spring 保存 -> Spring FindOne : 成功

  3. Spring 保存 -> .NET GetDocument:成功

4. .NET 更新插入 -> Spring FindOne:失败

为什么我不知道...请帮助我

enter image description here

enter image description here

.NET代码

    var config = new ClientConfiguration
    {
        Servers = new List<Uri>
        {
            new Uri("http://127.0.0.1:8091/pools")
        },

        Serializer = () => new JilSerializer()
    };

    using (var cluster = new Cluster(config))
    {
        IBucket bucket = null;
        try
        {
            bucket = cluster.OpenBucket("Test", "Test");

            cItemInfo TempClass = new cItemInfo();
            for (int i = 0; i < 3; i++)
            {
                TestClass temp = new TestClass();
                temp.var1 = i;
                temp.var2 = i;
                temp.var3 = ".NET Testing";
                TempClass.test.Add(temp);
            }
            TempClass.result = 200;

            string jsonStr = JsonConvert.SerializeObject(TempClass);

            var document = new Document<cItemInfo>();
            document.Id = "TestClass_NET";
            document.Content = TempClass;

            var upsert = bucket.Upsert(document);
            if (upsert.Success)
                Console.WriteLine("Success");

            Console.Read();
        }
        finally
        {
            if (bucket != null)
            {
                cluster.CloseBucket(bucket);
            }
        }
    }

Spring 框架代码

// [WS_ItemInfo.java]
@RequestMapping("GetItemInfoEx")
public @ResponseBody C_ItemInfo  GetItemInfoEx() {

    C_ItemInfo item = itemInfo.getItemInfo("TestClass_NET");

    return item;
}

// [CS_ItemInfo.java]
@Component
public class CS_ItemInfo {

@Autowired
private CR_ItemInfo itemInfo;

public void setItemInfo(C_ItemInfo item) {
    itemInfo.save(item);
}

public C_ItemInfo getItemInfo(String uID) {
    return itemInfo.findOne(uID);
}

public boolean getItemInfoExists(String uID) {
    return itemInfo.exists(uID);
}
}

// [CR_ItemInfo.java]
public interface CR_ItemInfo extends CrudRepository<C_ItemInfo, String> {

}

// [CouchbaseConfig.java]
@EnableCouchbaseRepositories
@Configuration
public class CouchBaseConfig extends AbstractCouchbaseConfiguration {

    @Override
    protected List<String> bootstrapHosts() {
        return Arrays.asList("127.0.0.1");
    }

    @Override
    protected String getBucketName() {
        return "test";
    }

    @Override
    protected String getBucketPassword() {
        return "test";
    }

    @Bean
    public MappingCouchbaseConverter mappingCouchbaseConverter() throws Exception {
        MappingCouchbaseConverter converter = new MyMappingCouchbaseConverter(couchbaseMappingContext());
        converter.setCustomConversions(customConversions());
        return converter;
    }

    private class MyMappingCouchbaseConverter extends MappingCouchbaseConverter {
        public MyMappingCouchbaseConverter(
                MappingContext<? extends CouchbasePersistentEntity<?>, CouchbasePersistentProperty> mappingContext) {
            super(mappingContext);

            typeMapper = new DefaultCouchbaseTypeMapper(null);
        }
    }
}

Spring Data Couchbase 1.4.2 基于 "older" 代 SDK(Java SDK 1.4.2)。这一代不支持 SDK 之间的 Cross-compatibility,这是第二代 SDK 的重点(.NET 2.2.2 属于,但不属于 Java 1.4.2)。

Second-generation Spring Data Couchbase 2.0.x 当前 in Release Candidate 并且应该生成 cross-compatible 与 .NET 2.2.2 的文档。