Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用spring数据jpa将单个实体转换为多个存储库_Spring_Hibernate_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Spring,Hibernate,elasticsearch" /> elasticsearch,Spring,Hibernate,elasticsearch" />

使用spring数据jpa将单个实体转换为多个存储库

使用spring数据jpa将单个实体转换为多个存储库,spring,hibernate,elasticsearch,Spring,Hibernate,elasticsearch,我有一些代码可以从RDBMS读取数据并将其插入Elasticsearch。我希望对这两个存储库使用相同的实体类。这是可能的还是一般来说,这是一种最佳做法。我使用的是SpringDataJPA、Hibernate和SpringBoot 我的实体类名为Contact with least two@OneToManyannotation,您可以在这里找到: @Entity public class Contact { @Id @GeneratedValue(strategy=Gener

我有一些代码可以从RDBMS读取数据并将其插入Elasticsearch。我希望对这两个存储库使用相同的实体类。这是可能的还是一般来说,这是一种最佳做法。我使用的是SpringDataJPA、Hibernate和SpringBoot

我的实体类名为Contact with least two
@OneToMany
annotation,您可以在这里找到:

@Entity
public class Contact {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="CONTACT_ID")
    private Long contactId;

    @Column(name="CONTACT_IDENTIFIER")
    private String contactIdentifier;

    //Some other properties

    @OneToMany(mappedBy="contact", cascade=CascadeType.ALL, fetch = FetchType.LAZY)
    @JsonManagedReference
    private List<ContactServiceEvent> listContactServiceEvent; 

    @OneToMany(mappedBy="contact", cascade=CascadeType.ALL, fetch = FetchType.LAZY)
    @JsonManagedReference
    private List<ContactVoiceServiceEvent> listContactVoiceServiceEvent; 

// setter getters
}
@实体
公共类联系人{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@列(name=“CONTACT\u ID”)
私人长联系人ID;
@列(name=“CONTACT\u IDENTIFIER”)
私有字符串标识符;
//其他一些属性
@OneToMany(mappedBy=“contact”,cascade=CascadeType.ALL,fetch=FetchType.LAZY)
@JsonManagedReference
私有列表列表ContactServiceEvent;
@OneToMany(mappedBy=“contact”,cascade=CascadeType.ALL,fetch=FetchType.LAZY)
@JsonManagedReference
私有列表listContactVoiceServiceEvent;
//塞特吸气剂
}
我的存储库界面如下

@Repository
public interface ContactRepository extends PagingAndSortingRepository<Contact, Long>, ContactRepositoryCustom{
}

@Repository
public interface ContactDocRepository extends ElasticsearchRepository<Contact, Long> {

}
@存储库
公共接口ContactRepository扩展了分页和排序存储库,ContactRepositoryCustom{
}
@存储库
公共接口ContactDocRepository扩展了ElasticsearchRepository{
}

请告诉我应该怎么做,因为我无法通过谷歌搜索找到任何明确的答案。

使用hibernate,我们可以对不同的存储库使用相同的实体,因为我知道您必须为各自的存储库创建不同的会话工厂。在这种情况下,每个会话工厂使用数据源映射到某个存储库。 然后使用不同的会话工厂,您可以使用相同的代码从不同的存储库获取数据。 我不知道elasticsearch是如何工作的。我认为这将有助于您继续进行。

使用

它是由Hibernate团队为此目的创建的,现在也可以与Elasticsearch同步

您不仅可以使用相同的实体,而且不必担心:

  • 序列化问题以及如何将对象映射到JSON(只需将属性映射到Elasticsearch字段)
  • 如何连接到Elasticsearch服务器,您只需对其进行配置即可
  • 确保将所有更改写入两个存储库。写入是完全自动的
  • 为此目的进行了高度优化

谢谢,也许我的第一个问题应该更清楚一些。主要问题是,如果im同时将同一对象标记为
@实体
@文档
,以后会不会导致任何问题。有人有经验吗?