REST上的ID和复杂数据映射&冬眠

时间:2015-08-10 18:15:56

标签: java hibernate rest

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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