我有一些相互关联的非常复杂的数据对象,我需要在两个独立的数据库(两个应用程序)中存在。数据的存储不用担心,两个应用程序(source
和target
)都在查看相同的基类数据来处理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处理从source
到target
系统的大量复杂自定义关系数据,而不会发生冲突或问题?< / 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;
}
}
答案 0 :(得分:1)
一般方法是使用自然键来识别分布式环境中的对象。除了生成的密钥或使用生成器之外,您还可以添加自然密钥来为主键创建UUID值。