繁体   English   中英

REST和Hibernate上的ID和复杂数据映射

[英]Ids and Complex Data Mapping over REST & Hibernate

我有一些相互关联的非常复杂的数据对象,我需要将它们放置在两个单独的数据库(两个应用程序)中。 数据的存储不必担心,并且两个应用程序( sourcetarget )都在查看同一基类数据以处理setter,getter,hibernate等。

由于我想将REST服务设计为以项目为中心,因此我有几个调用来批量设置对象。 加载完这些之后,我正在考虑根据项目的ID进行一次项目特定的REST调用,以获取GET信息。 这带来了一些我不确定REST是否可以解决的问题。

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

REST或Hibernate中是否可以使用REST调用,基于ID的URL处理大量复杂的自定义关系数据从sourcetarget系统,而不会发生冲突或问题?

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

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

通用方法是使用自然键来识别分布式环境中的对象。 您可以在生成的密钥之外添加自然密钥,也可以使用生成器为主密钥创建UUID值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM