0
我试图让使用微服务架构简单春季启动的Web应用程序。如何在弹簧启动时使不同微服务中的两个实体之间发生关系?
我有两个微服务与实体如下定义:
Microservice 1 :
@Entity
public class Article {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
private String Content;
}
和
Microservice 2 :
@Entity
public class Tag {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
}
现在我想有很多要在这两个实体之间的许多关系在我网关 。
我曾试图用如下假死客户端:
Gateway :
@FeignClient(value = "article-service")
public interface ArticleClient {
@RequestMapping(value = "/articles/", method = RequestMethod.GET)
Set<Article> getArticleById(@RequestParam("id") Long id);
}
@FeignClient(value = "tag-service")
public interface TagClient {
@RequestMapping(value = "/tags/", method = RequestMethod.GET)
Tag getTagById(@RequestParam("id") Long id);
}
并确定文章和标签实体在我网关这样的:
Gateway :
@JsonIgnoreProperties(ignoreUnknown = true)
public class Entry {
private Long id;
private String title;
private String Content;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "article_tag",
joinColumns = @JoinColumn(name = "article_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "tag_id",
referencedColumnName = "id"))
private Set<Tag> tags;
}
@JsonIgnoreProperties(ignoreUnknown = true)
public class Tag {
private Long id;
private String title;
@ManyToMany(mappedBy = "tags")
private Set<Article> articles;
}
我有一个表命名article_tag在我的数据库(的Postgres)。
现在,我怎么定义的网关我的仓库? 如何编写getArticlesByTagId()或getTagsByArticleId()函数? 我做任何我所能,使这个关系的工作,但我认为他们不会互相:)相处
据我所知,你没有定义关系(因为你不会有任何)。取而代之的是,你的网关只包含'article_tag'的实体,你必须自己映射'article_id'和'tag_id'字段。如果您想检索特定标签的文章,请查找'article_id'并将它们传递给文章microservice(REST调用?)以检索完整的文章。 – g00glen00b