我有一些代码应该从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> {
}
请让我知道我应该怎么做,因为我用谷歌搜索找不到任何明确的答案。
答案 0 :(得分:0)
使用hibernate,我们可以为不同的存储库使用相同的实体,因为我知道你必须为各自的存储库创建不同的会话工厂。在这种情况下,每个会话工厂使用数据源映射到某个存储库。 然后使用不同的会话工厂,您可以使用相同的代码从不同的存储库中获取数据。 我不知道弹性搜索是如何工作的。我认为它会帮助你继续。
答案 1 :(得分:0)
它是由Hibernate团队为此目的创建的,现在也可以与Elasticsearch同步。
您不仅可以使用相同的实体,而且无需费心: