我有2个基于spring-boot框架的应用程序。我需要通过id将对象从另一个微服务映射到该字段。我的pojo课程:
@Entity
@Table(name = "sample_object")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@Data
@NoArgsConstructor
@EqualsAndHashCode(exclude = "id")
public class SampleObject {
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "SAMPLE_FIELD")
private String sampleField;
/**
* ID to get large object from another microservice
*/
@Column(name = "LARGE_OBJECT_ID")
private String largeObjectId;
/**
* That object i will get from another microservice
*/
@Transient
private LargeObject objectFromAnotherService;
}
我不想通过其他请求来获取它,因为我有大约60,000多个对象,并且发送那么多请求,我想,这不是一个好主意。所以,我的问题是:获取对象并将对象映射到实体的最快方法是什么?如果这种映射可以与对象创建过程同时发生,那将会非常棒。
答案 0 :(得分:0)
您可以在数据库中拥有此实体的副本,并注意与其他微服务保持同步(如果需要¹)。
因此,您需要创建一个具有相同字段的新实体,与SampleObject
建立一种对SampleObject
实体更有意义的关系。像:
@ManyToOne
private LargeObject objectFromAnotherService;
largeObjectId
可以移动到这个新实体。因此,在创建SampleObject实体之前,您向另一个微服务发出请求以获取LargeObject数据并创建SampleObject和LargeObject实体。
另一个替代方法是将LargeObject的所有字段直接映射到SampleObject ,而不为其创建独占类。我不知道你的问题的背景,但这种方法在很多场景中都有意义。
但是要小心这个场景:如果这两个微服务彼此需要这么多,也许他们需要在一起而不是分开。
¹。这称为最终一致性。如果没有提到的问题是否有必要,我只是将这个脚注作为参考