我有一些相互关联的非常复杂的数据对象,我需要在两个独立的数据库(两个应用程序)中生活。数据的存储并不令人担忧,两个应用程序(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 (代码简化了很多以忽略某些复杂性):
@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;
}
}发布于 2015-08-11 08:41:45
一般的方法是使用自然密钥来识别分布式环境中的对象。除了生成的键之外,还可以添加自然键,或者使用生成器为主键创建UUID值。
https://stackoverflow.com/questions/31926396
复制相似问题