标记非数据库字段@Transient vs extent JPA Entity?

Mark non db fields @Transient vs extent JPA Entity?

我们有一个JPA Entity。一旦实体在数据库中持久化,该实体的某些字段(数据库列)以及一些其他数据(不属于该实体的一部分)必须存储在 JCR 对象存储中。

我是否应该为 DB 和 JCR 创建一个实体 (JPA) 并在实体中添加 JCR 字段并标记它们 @Transient?

我应该使用继承还是组合(使用 JPA 实体)并创建一个新的 JCR 特定对象?基本上,JPA 实体应该严格用于数据库还是 @Transient 在这种情况下是一种滥用?

should JPA entities be strictly used for DB or is @Transient in this case an abuse?

不是滥用,但您需要非常小心地处理 JPA 操作。一 mergerefresh 过多,您的临时字段值将丢失。

我个人会在 JPA 和 JCR 上创建另一个抽象层,将您的域对象作为 POJO 进行管理,某种 DomainObjectRepository 可以处理 CRUD 操作,与 两者交互 JPA 和 JCR,并封装映射 from/to 两种存储技术(每个技术的映射层都有一组专用的对象 - JPA 实体、JCR 节点)。