4

看起来现在每个人都使用注释来保存数据。

为什么这是个问题?
持久性注释特定于所选持久性 API。如果使用 MySQL,则使用 @Entity;如果使用 Couchbase,则必须使用 @Document。

在较大的项目中,通常有一个 API 层,用于对对象进行建模。该层具有或至少不应该具有对任何特定于数据库的任何依赖关系。

public class User implements IUser {
    private String email;
    private String id;
    private String password;
    private String username;

所以这里不能使用@Document。

数据库/持久层目前只有这个spring-data仓库

public interface IUserRepository extends CrudRepository<IUser, String> {}

和配置类

@Configuration
@EnableCouchbaseRepositories
class CouchbaseConfiguration extends AbstractCouchbaseConfiguration {

我希望找到一个基于 XML 的配置示例,但什么也没有,到处都是注释。
我怎么解决这个问题?
是否有基于 XML 的对象映射方法?
如果没有,如何在不污染 API 层的情况下解决这个问题?

4

1 回答 1

3

没有基于 XML 的方法。如果你需要保持你的 API 层完全干净,你仍然需要使用一个具体的后备存储并在某个时候选择一种技术......所以这表明你必须在 API DTO 和 Spring Data 持久化之间添加一个层(实体)。

请注意,Spring Data 根据 store 对数据模型应用不同的约定。对于 Couchbase,@Document注释不是必需的,除非您想处理expiry/TTL。也就是说,@Id注释仍然是强制性的(来自 SDK 或 Spring Data Commons,我会在你的情况下推荐)......

另请注意,注释是声明。如果没有将数据存储用于带注释的类型,它们不会启动任何操作。

id如果您遵循所有约定(特别是在实体 POJO 中命名的id 字段),Spring Data Mongo 似乎可以在没有任何注释的情况下进行管理_id,因此如果没有 id,Spring Data Couchbase 可以修改为默认为 id 的这种约定找到注释了吗?(那里有很好的公关潜力;-)

于 2016-12-06T17:20:05.113 回答