{"id":1962,"date":"2015-12-17T00:21:53","date_gmt":"2015-12-17T00:21:52","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=1962"},"modified":"2025-10-09T07:25:26","modified_gmt":"2025-10-09T14:25:26","slug":"spring-data-couchbase-2-0-preview","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/spring-data-couchbase-2-0-preview\/","title":{"rendered":"Spring Data Couchbase: Una nueva generaci\u00f3n (2.0 Preview)"},"content":{"rendered":"<p>En <code>Spring Data Couchbase<\/code> proyecto comunitario se ha construido hist\u00f3ricamente sobre la <code>1.4<\/code> generaci\u00f3n del funcionario <code>SDK Java de Couchbase<\/code>aunque el <code>SDK 2.0<\/code> hace ya bastante tiempo.<\/p>\n<p>Pero ahora es un buen momento para actualizar <a href=\"https:\/\/docs.couchbase.com\/sdk-extensions\/spring-data-couchbase.html\">Spring Data Couchbase<\/a> al \u00faltimo SDK 2.2, sobre todo porque es el que tiene soporte para <code>N1QL<\/code>tambi\u00e9n conocido como \"SQL para documentos\", el nuevo lenguaje de consulta de Couchbase.<\/p>\n<p>La generaci\u00f3n 2.x SDK es una reescritura completa, construida sobre una capa totalmente as\u00edncrona y exponiendo <code>RxJava<\/code> <code>Observable<\/code>s para la API async. Como tal, tiene un nombre de artefacto de Maven independiente y garantiza una versi\u00f3n principal de Spring Data Couchbase.<\/p>\n<p>Las principales diferencias entre la generaci\u00f3n 1.x de Spring Data Couchbase y su versi\u00f3n 2.x son:<\/p>\n<ul>\n<li>Los elementos de configuraci\u00f3n se acercan m\u00e1s a la realidad de Couchbase: Entorno, Cluster, Bucket (permitiendo potencialmente crear <code>CouchbaseTemplate<\/code>s que se conectan cada uno a un cubo diferente, o incluso a un cl\u00faster).<\/li>\n<li>La copia de seguridad de los m\u00e9todos personalizados no siempre se realiza con <code>vistas<\/code> ya no, ahora se hace por defecto m\u00e1s bien a trav\u00e9s de <code>N1QL<\/code>que es mucho m\u00e1s flexible y requiere mucho menos mantenimiento por parte del servidor.<\/li>\n<li>M\u00e9todos personalizados con <code>vistas<\/code> se han modificado un poco para ce\u00f1irse mejor a la filosof\u00eda de Spring Data. Esto reduce la flexibilidad, pero las implementaciones se generan a partir del nombre del m\u00e9todo (\"<code>derivaci\u00f3n de consultas<\/code>&#8220;).<\/li>\n<li>Ahora es posible reducir la vista.<\/li>\n<li>Cambiar el nombre del campo JSON que almacena la informaci\u00f3n de tipo (\"<code>Clase<\/code>\"). Por ejemplo, un <code>Pasarela de sincronizaci\u00f3n<\/code>-compatible, <code>javaClass<\/code>se ofrece en <code>MappingCouchbaseConverter.TYPEKEY_SYNCGATEWAY_COMPATIBLE<\/code>.<\/li>\n<\/ul>\n<p>Por supuesto, puede seguir accediendo a la API de nivel inferior mediante la funci\u00f3n <code>CouchbaseTemplate<\/code> en lugar de <code>CouchbaseRepository<\/code> e incluso se puede acceder a la interfaz subyacente <code>Cubo<\/code> del SDK.<\/p>\n<p>Profundicemos un poco m\u00e1s en estos cambios.<\/p>\n<h2>M\u00e9todos de repositorio a trav\u00e9s de N1QL<\/h2>\n<p>La gran novedad de Couchbase 4.0 es <code>N1QL<\/code>un superconjunto de SQL que funciona con documentos JSON (por lo que a\u00f1ade a SQL especificidades relacionadas con JSON).<\/p>\n<p>Esto es especialmente bueno para el patr\u00f3n Repository y la derivaci\u00f3n de consultas en Spring Data, porque la gran mayor\u00eda de las palabras clave de derivaci\u00f3n de consultas tambi\u00e9n se traducen f\u00e1cilmente a N1QL.<\/p>\n<p>N1QL es ahora la caracter\u00edstica por defecto de respaldo de Couchbase para los m\u00e9todos de Repositorio. Tambi\u00e9n puede optar por utilizar la funci\u00f3n <code>@Query<\/code> si quiere ser expl\u00edcito.<\/p>\n<p>Por ejemplo, un m\u00e9todo derivado de una consulta utilizando N1QL podr\u00eda tener el siguiente aspecto:<\/p>\n<p>A su vez, para los par\u00e1metros <code>\"fruta\", \"tarta de queso\", 5<\/code>, nos da una consulta N1QL parecida a:<\/p>\n<p>Como puede ver, el framework incluso elegir\u00e1 correctamente qu\u00e9 campos seleccionar (incluidos los metadatos) para poder desmarcar el documento en un archivo <code>PartyCake<\/code> entidad.<\/p>\n<p>En cuanto a las opiniones, <code>primeroX<\/code> sintaxis para <code>L\u00cdMITE<\/code> y <code>countBy<\/code> en lugar de <code>findAllBy<\/code> hacer un <code>SELECT COUNT(*)<\/code> tambi\u00e9n son compatibles.<\/p>\n<p>Otra ventaja frente a las vistas es que puedes tener un \u00fanico \u00edndice de prop\u00f3sito general (un \"\u00edndice primario\" desde la perspectiva de N1QL) y usarlo para todas tus consultas, por lo que esto supone menos ajuste del lado del servidor en comparaci\u00f3n con las vistas, donde cada consulta diferente necesitar\u00e1 una vista diferente.<\/p>\n<blockquote><p>Nota: por supuesto tambi\u00e9n puedes crear \u00edndices secundarios m\u00e1s especializados y eficientes en N1QL.<\/p><\/blockquote>\n<h2>M\u00e9todos de repositorio a trav\u00e9s de Views<\/h2>\n<p>Un gran cambio en esta versi\u00f3n es que ahora, las consultas de repositorio (tambi\u00e9n conocidas como m\u00e9todos de repositorio personalizados) que se basan en vistas est\u00e1n m\u00e1s en l\u00ednea con la filosof\u00eda de Spring Data. Tambi\u00e9n tienen que ser anotados expl\u00edcitamente con <code>@View(viewName=\"algo\")<\/code>.<\/p>\n<p>Esto significa que nada espec\u00edfico de Couchbase deber\u00eda filtrarse en la interfaz de tu repositorio. En su lugar, lo que puede hacer es utilizar <code>derivaci\u00f3n de consultas<\/code> para las consultas m\u00e1s sencillas.<\/p>\n<p>Esto significa que puedes hacer algo as\u00ed:<\/p>\n<p>El framework tomar\u00e1 esa interfaz y crear\u00e1 una consulta a partir del nombre del m\u00e9todo y los par\u00e1metros dados. Por ejemplo, si se llama con un <code>Lista<\/code> de <code>fruta<\/code> y <code>az\u00facar<\/code> dar\u00e1 como resultado una consulta como <code>?keys=[\"fruit\",\"sugar\"]<\/code>.<\/p>\n<p>Consulte la documentaci\u00f3n para obtener una lista exhaustiva de las palabras clave de su nombre de m\u00e9todo que pueden traducirse en un par\u00e1metro de consulta. Para cualquier otro uso, debes proporcionar la implementaci\u00f3n t\u00fa mismo.<\/p>\n<h3>Uso de la funci\u00f3n de reducci\u00f3n de Views<\/h3>\n<p>Otra novedad que antes no se admit\u00eda es la ejecuci\u00f3n del <code>reducir la funci\u00f3n<\/code> si tiene uno. Ahora, para ejecutarlo, basta con declarar un m\u00e9todo que empiece por <code>cuente<\/code> en lugar de <code>findAll<\/code>que devuelve un long.<\/p>\n<p>Tenga en cuenta que la funci\u00f3n de reducci\u00f3n en Couchbase puede ser otra que la preexistente <code>Cuenta<\/code> siempre que devuelva un long.<\/p>\n<p>Del mismo modo, si se a\u00f1ade la variaci\u00f3n \"<code>topX<\/code>\" o \"<code>primeroX<\/code>\" en el nombre de un m\u00e9todo se producir\u00e1 un error adicional <code>l\u00edmite<\/code> que se establece en la solicitud (p. ej. <code>findFirst5ByLastName<\/code> limitar\u00e1 la lista a 5 resultados).<\/p>\n<h2>Configurar la coherencia, leer sus propios escritos<\/h2>\n<p>Una cosa que surge a menudo cuando se utilizan \u00edndices secundarios poblados as\u00edncronamente como vistas y <code>GSI<\/code> (el nuevo motor de \u00edndice secundario que respalda a N1QL), es la necesidad de <code>Lea sus propios escritos<\/code>.<\/p>\n<p>Esto implica que la vista\/N1QL no debe responder mientras los datos est\u00e9n a\u00fan en proceso de indexaci\u00f3n, por lo que se sacrifica algo de rendimiento en favor de la consistencia.<\/p>\n<p>Lo contrario (y por defecto en Spring Data Couchbase) es favorecer el rendimiento aceptando que se devuelvan datos obsoletos.<\/p>\n<p>Hemos a\u00f1adido un medio global de configurar que para todas las consultas (basadas en vistas o en N1QL) que son construidas por el marco a trav\u00e9s de la derivaci\u00f3n de consultas, proporcionando una peque\u00f1a abstracci\u00f3n en torno al concepto de <code>Coherencia<\/code>.<\/p>\n<p>Esto se hace anulando la funci\u00f3n <code>AbstractCouchbaseConfiguration<\/code>'s <code>getDefaultConsistency()<\/code> m\u00e9todo. <code>Coherencia<\/code> es un enum que permite elegir entre <code>LEER_ESCRITURAS_PROPIAS<\/code>, <code>FUERTEMENTE_CONSISTENTE<\/code>, <code>UPDATE_AFTER<\/code> y <code>EVENTUALMENTE_CONSISTENTE<\/code>.<\/p>\n<p>Tambi\u00e9n puede hacerlo en XML utilizando la funci\u00f3n <code>coherencia<\/code> del atributo <code><\/code> etiqueta.<\/p>\n<h2>Modificaci\u00f3n del campo de informaci\u00f3n de tipo en JSON almacenado<\/h2>\n<p>Por \u00faltimo, algunos usuarios han informado de problemas con Spring Data y la parte de Couchbase Mobile, con la funci\u00f3n <code>Pasarela de sincronizaci\u00f3n<\/code> rechazar documentos que contengan campos precedidos por un gui\u00f3n bajo.<\/p>\n<p>Esto es problem\u00e1tico ya que Spring Data almacena la informaci\u00f3n de tipo en un archivo <code>Clase<\/code> campo :(<\/p>\n<p>La soluci\u00f3n es permitir, a trav\u00e9s de la configuraci\u00f3n, elegir el nombre de ese campo de informaci\u00f3n de tipo. Puede hacerlo anulando la directiva <code>typeKey()<\/code> m\u00e9todo en <code>AbstractCouchbaseConfiguration<\/code>. Por ejemplo, puede utilizar la constante <code>MappingCouchbaseConverter.TYPEKEY_SYNCGATEWAY_COMPATIBLE<\/code> (que es \"<code>javaClass<\/code>&#8220;).<\/p>\n<p>Este campo es el que utilizan las consultas N1QL generadas para filtrar s\u00f3lo los documentos correspondientes a la entidad del repositorio.<\/p>\n<h2>Configuraci\u00f3n<\/h2>\n<p>El SDK 2.0 est\u00e1 ahora m\u00e1s cerca de la terminolog\u00eda de un cluster Couchbase, con objetos como <code>Grupo<\/code> y <code>Cubo<\/code> como ciudadanos de primera clase. Como resultado, en la Configuraci\u00f3n de Datos de Spring en lugar de un <code>CouchbaseClient<\/code> configurar frijoles m\u00e1s diversos.<\/p>\n<p>El ajuste del SDK se realiza en una clase separada, la clase <code>CouchbaseEnvironment<\/code>que le permite ajustar los grupos de io, los tiempos de espera, etc. Los entornos deben reutilizarse en la medida de lo posible en todos los entornos. <code>Grupo<\/code>s, y <code>Grupo<\/code>s se deben reutilizar para abrir archivos singleton <code>Cubo<\/code>s (todo debe reutilizarse en la medida de lo posible, b\u00e1sicamente).<\/p>\n<p>Para obtener un <code>CouchbaseTemplate<\/code>se necesita un <code>Medio ambiente<\/code>, a <code>Grupo<\/code> y un <code>Cubo<\/code>. Todos ellos se crean autom\u00e1ticamente al ampliar JavaConfig <code>AbstractCouchbaseConfiguration<\/code>lo \u00fanico que tiene que proporcionar son:<\/p>\n<ul>\n<li>la lista de nodos desde los que arrancar (s\u00f3lo las IP o los nombres de host)<\/li>\n<li>el nombre del cubo<\/li>\n<li>la contrase\u00f1a del cubo<\/li>\n<\/ul>\n<p>Por supuesto, si desea anular, por ejemplo, el valor predeterminado <code>Medio ambiente<\/code> puede anular los m\u00e9todos correspondientes en la configuraci\u00f3n de <code>AbstractCouchbaseConfiguration<\/code> (como se muestra en el siguiente fragmento):<\/p>\n<p>El equivalente en xml es:<\/p>\n<h2>Configuraci\u00f3n del servidor<\/h2>\n<p>M\u00e9todos CRUD de Spring Data Couchbase obtenidos de un <code>CrudRepository<\/code> siguen estando respaldadas por las operaciones Clave\/Valor de Couchbase (cuando se trabaja con entidades \u00fanicas o entidades mutantes), o por una interfaz <code>ver<\/code> (cuando trabajamos con varias entidades de las que no conocemos el ID, por ejemplo para <code>contar()<\/code> o <code>findAll()<\/code> m\u00e9todos).<\/p>\n<p>Esto significa que usted todav\u00eda tiene que tener un \u00edndice de todas sus entidades de alguna manera, en la forma de una vista en Couchbase.<\/p>\n<p>Por defecto, el framework buscar\u00e1 el nombre de su entidad, sin may\u00fasculas, para el documento de dise\u00f1o y una vista llamada <code>todos<\/code> (Ej. <code>partyCake\/todos<\/code> para un <code>PartyCake<\/code> clase de entidad).<\/p>\n<h2>Conclusi\u00f3n<\/h2>\n<p>Eso es todo (por ahora) para esta primera versi\u00f3n preliminar de Spring Data Couchbase 2.0.x. \u00a1Espero que os guste!<\/p>\n<p>En <a href=\"https:\/\/docs.spring.io\/spring-data\/couchbase\/docs\/2.0.0.M1\/reference\/html\/\">documentaci\u00f3n del proyecto<\/a> y el README han sido actualizados con estas nuevas caracter\u00edsticas y todo el c\u00f3digo y docs son visibles en el <code>2.0.x<\/code> en la rama <a href=\"https:\/\/github.com\/spring-projects\/spring-data-couchbase\/tree\/2.0.x\">Spring Data Couchbase Repositorio Github<\/a>.<\/p>\n<p>Gracias a Oliver del equipo de Spring Data por su apoyo, y a nuestros usuarios que intervinieron y ofrecieron contribuciones o sugerencias de mejora (no es una lista exhaustiva):<\/p>\n<blockquote><p>vasilievip, KlausUnger, kdheerendra, jloisel, DWvanGeest, ajbrown, wilsondy<\/p><\/blockquote>\n<p>Para descargar y utilizar esta vista previa, utilice <code>Maven<\/code> (tanto con el <code>Primavera<\/code> instant\u00e1nea y <code>Couchbase<\/code> repositorios de instant\u00e1neas):<\/p>","protected":false},"excerpt":{"rendered":"<p>The Spring Data Couchbase community project has been historically built upon the 1.4 generation of the official Couchbase Java SDK, although the SDK 2.0 has been out for quite some time. But now is definitely a great time to upgrade [&hellip;]<\/p>","protected":false},"author":48,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1818],"tags":[1466,1424,1465],"ppma_author":[9022],"class_list":["post-1962","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java","tag-preview","tag-spring","tag-spring-data"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Spring Data Couchbase: A New Generation (2.0 Preview) - The Couchbase Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/es\/spring-data-couchbase-2.0-preview\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spring Data Couchbase: A New Generation (2.0 Preview)\" \/>\n<meta property=\"og:description\" content=\"The Spring Data Couchbase community project has been historically built upon the 1.4 generation of the official Couchbase Java SDK, although the SDK 2.0 has been out for quite some time. But now is definitely a great time to upgrade [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/spring-data-couchbase-2.0-preview\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-12-17T00:21:52+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-09T14:25:26+00:00\" \/>\n<meta name=\"author\" content=\"Simon Basle, Software Engineer, Pivotal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Simon Basle, Software Engineer, Pivotal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/spring-data-couchbase-2.0-preview\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/spring-data-couchbase-2-0-preview\/\"},\"author\":{\"name\":\"Simon Basle, Software Engineer, Pivotal\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/a4086d75b59570cc2e5ff66d98c5d1a1\"},\"headline\":\"Spring Data Couchbase: A New Generation (2.0 Preview)\",\"datePublished\":\"2015-12-17T00:21:52+00:00\",\"dateModified\":\"2025-10-09T14:25:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/spring-data-couchbase-2-0-preview\/\"},\"wordCount\":1329,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/spring-data-couchbase-2.0-preview\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"preview\",\"spring\",\"spring-data\"],\"articleSection\":[\"Java\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/spring-data-couchbase-2.0-preview\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/spring-data-couchbase-2-0-preview\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/spring-data-couchbase-2.0-preview\/\",\"name\":\"Spring Data Couchbase: A New Generation (2.0 Preview) - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/spring-data-couchbase-2.0-preview\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/spring-data-couchbase-2.0-preview\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2015-12-17T00:21:52+00:00\",\"dateModified\":\"2025-10-09T14:25:26+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/spring-data-couchbase-2.0-preview\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/spring-data-couchbase-2.0-preview\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/spring-data-couchbase-2.0-preview\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/spring-data-couchbase-2.0-preview\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Spring Data Couchbase: A New Generation (2.0 Preview)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/a4086d75b59570cc2e5ff66d98c5d1a1\",\"name\":\"Simon Basle, Software Engineer, Pivotal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/4b2bcd169f85f21cee7b8a0e0c9e7854\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/3c3aec94782fea5f0a199368c15e836198faf05c1591e0ae0b91178a59457781?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/3c3aec94782fea5f0a199368c15e836198faf05c1591e0ae0b91178a59457781?s=96&d=mm&r=g\",\"caption\":\"Simon Basle, Software Engineer, Pivotal\"},\"description\":\"Simon Basl_ is a Paris-based Software Engineer working in the Spring team at Pivotal. Previously, he worked in the Couchbase Java SDK team. His interests span software design aspects (OOP, design patterns, software architecture), rich clients, what lies beyond code (continuous integration, (D)VCS, best practices), and reactive programming. He is also an editor for the French version of InfoQ.com.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/simon-basle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Spring Data Couchbase: A New Generation (2.0 Preview) - The Couchbase Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/es\/spring-data-couchbase-2.0-preview\/","og_locale":"es_MX","og_type":"article","og_title":"Spring Data Couchbase: A New Generation (2.0 Preview)","og_description":"The Spring Data Couchbase community project has been historically built upon the 1.4 generation of the official Couchbase Java SDK, although the SDK 2.0 has been out for quite some time. But now is definitely a great time to upgrade [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/es\/spring-data-couchbase-2.0-preview\/","og_site_name":"The Couchbase Blog","article_published_time":"2015-12-17T00:21:52+00:00","article_modified_time":"2025-10-09T14:25:26+00:00","author":"Simon Basle, Software Engineer, Pivotal","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Simon Basle, Software Engineer, Pivotal","Est. reading time":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/spring-data-couchbase-2.0-preview\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/spring-data-couchbase-2-0-preview\/"},"author":{"name":"Simon Basle, Software Engineer, Pivotal","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/a4086d75b59570cc2e5ff66d98c5d1a1"},"headline":"Spring Data Couchbase: A New Generation (2.0 Preview)","datePublished":"2015-12-17T00:21:52+00:00","dateModified":"2025-10-09T14:25:26+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/spring-data-couchbase-2-0-preview\/"},"wordCount":1329,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/spring-data-couchbase-2.0-preview\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["preview","spring","spring-data"],"articleSection":["Java"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/spring-data-couchbase-2.0-preview\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/spring-data-couchbase-2-0-preview\/","url":"https:\/\/www.couchbase.com\/blog\/spring-data-couchbase-2.0-preview\/","name":"Spring Data Couchbase: A New Generation (2.0 Preview) - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/spring-data-couchbase-2.0-preview\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/spring-data-couchbase-2.0-preview\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2015-12-17T00:21:52+00:00","dateModified":"2025-10-09T14:25:26+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/spring-data-couchbase-2.0-preview\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/spring-data-couchbase-2.0-preview\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/spring-data-couchbase-2.0-preview\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/spring-data-couchbase-2.0-preview\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Spring Data Couchbase: A New Generation (2.0 Preview)"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/a4086d75b59570cc2e5ff66d98c5d1a1","name":"Simon Basle, Ingeniero de Software, Pivotal","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/4b2bcd169f85f21cee7b8a0e0c9e7854","url":"https:\/\/secure.gravatar.com\/avatar\/3c3aec94782fea5f0a199368c15e836198faf05c1591e0ae0b91178a59457781?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3c3aec94782fea5f0a199368c15e836198faf05c1591e0ae0b91178a59457781?s=96&d=mm&r=g","caption":"Simon Basle, Software Engineer, Pivotal"},"description":"Simon Basl_ es un Ingeniero de Software residente en Par\u00eds que trabaja en el equipo Spring de Pivotal. Anteriormente, trabaj\u00f3 en el equipo de Couchbase Java SDK. Sus intereses abarcan aspectos de dise\u00f1o de software (OOP, patrones de dise\u00f1o, arquitectura de software), clientes ricos, lo que hay m\u00e1s all\u00e1 del c\u00f3digo (integraci\u00f3n continua, (D)VCS, mejores pr\u00e1cticas) y programaci\u00f3n reactiva. Tambi\u00e9n es editor de la versi\u00f3n francesa de InfoQ.com.","url":"https:\/\/www.couchbase.com\/blog\/es\/author\/simon-basle\/"}]}},"authors":[{"term_id":9022,"user_id":48,"is_guest":0,"slug":"simon-basle","display_name":"Simon Basle, Software Engineer, Pivotal","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/3c3aec94782fea5f0a199368c15e836198faf05c1591e0ae0b91178a59457781?s=96&d=mm&r=g","author_category":"","last_name":"Basle","first_name":"Simon","job_title":"","user_url":"","description":"Simon Basl_ es un Ingeniero de Software residente en Par\u00eds que trabaja en el equipo Spring de Pivotal. Anteriormente, trabaj\u00f3 en el equipo de Couchbase Java SDK. Sus intereses abarcan aspectos de dise\u00f1o de software (OOP, patrones de dise\u00f1o, arquitectura de software), clientes ricos, lo que hay m\u00e1s all\u00e1 del c\u00f3digo (integraci\u00f3n continua, (D)VCS, mejores pr\u00e1cticas) y programaci\u00f3n reactiva. Tambi\u00e9n es editor de la versi\u00f3n francesa de InfoQ.com."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/1962","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/48"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=1962"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/1962\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=1962"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=1962"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=1962"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=1962"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}