首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于REST和Hibernate的Ids和复杂数据映射

问基于REST和Hibernate的Ids和复杂数据映射
EN

Stack Overflow用户
提问于 2015-08-10 18:15:56
回答 1查看 116关注 0票数 1

我有一些相互关联的非常复杂的数据对象,我需要在两个独立的数据库(两个应用程序)中生活。数据的存储并不令人担忧,两个应用程序(source和target)都在查看相同的数据基类来处理setter、getters、hibernate等。

由于我希望将REST服务设计为非常以项为中心的服务,所以我有几个调用可以批量地设置对象。在加载这些信息之后,我正在考虑通过并调用特定于项的REST调用来获取基于项目ID的信息。这就引出了一些我不确定REST是否能够处理的问题。

如果设置了source应用程序上的ID,当Hibernate @JoinTable通过对target的REST调用进行移植时,我担心基于ID的项关联。尝试使用来自target的ID获取item/{id}/relationships产生的问题,因为{id}来自target,并且在加载数据后与source不匹配。

REST或Hibernate中是否有一种方法可以使用REST调用、基于ID的URL来处理使用REST调用、基于ID的URL将大量复杂的自定义关系数据从source转移到target系统而不发生冲突或问题?

示例类和DB (代码简化了很多以忽略某些复杂性):

代码语言:javascript
复制
@Table(name="GUIDELINE")
public class Guideline{
  private String name;
  private Set<RelatedItem> relatedItems;
  protected Long id;
  /** Database id of this object used by Hibernate. */
  @Id
  @GeneratedValue(generator="increment")
  @GenericGenerator(name="increment", strategy = "increment")
  @XmlElement
  @Column(name = "ID", unique = true, nullable = false)
  public Long getId() {
    return id;
  }

  @ManyToMany(fetch = FetchType.EAGER)
  @JsonIgnore
  @JoinTable(name = "RELATIONSHIPS", 
  joinColumns = { @JoinColumn(name = "GUIDELINE_ID", referencedColumnName = "ID", table = "GUIDELINE", nullable = false) }, 
  inverseJoinColumns = { @JoinColumn(name = "ITEM_ID", referencedColumnName = "ID", table = "RELATEDITEM", nullable = false) })
  public Set<RelatedItem> getRelatedItems() {
    return relatedItems;
  }

  @Column(name = "NAME", unique = true, nullable = false, length = 240)
  public String getName(){
    return this.name;
  }
}

@Table(name="RELATEDITEM")
public class RelatedItem{
  private String name;
  protected Long id;
  /** Database id of this object used by Hibernate. */
  @Id
  @GeneratedValue(generator="increment")
  @GenericGenerator(name="increment", strategy = "increment")
  @XmlElement
  @Column(name = "ID", unique = true, nullable = false)
  public Long getId() {
    return id;
  }

  @Column(name = "NAME", unique = true, nullable = false, length = 240)
  public String getName(){
    return this.name;
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-11 08:41:45

一般的方法是使用自然密钥来识别分布式环境中的对象。除了生成的键之外,还可以添加自然键,或者使用生成器为主键创建UUID值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31926396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档