使用spring数据jpa将单个实体添加到多个存储库

时间:2017-04-07 02:06:11

标签: spring hibernate elasticsearch

我有一些代码应该从RDBMS读取数据并将其插入Elasticsearch。我想为两个存储库使用相同的实体类。是可能的还是一般的,这是最佳做法。我正在使用Spring Data JPA,Hibernate和Spring BOOT。

我的实体类名为Contact,至少有两个@OneToMany注释,您可以在这里找到:

@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
}

我的存储库界面如下

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

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

}

请让我知道我应该怎么做,因为我用谷歌搜索找不到任何明确的答案。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

使用Hibernate Search

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

您不仅可以使用相同的实体,而且无需费心:

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