[英]Ids and Complex Data Mapping over REST & Hibernate
我有一些相互关联的非常复杂的数据对象,我需要将它们放置在两个单独的数据库(两个应用程序)中。 数据的存储不必担心,并且两个应用程序( source
和target
)都在查看同一基类数据以处理setter,getter,hibernate等。
由于我想将REST服务设计为以项目为中心,因此我有几个调用来批量设置对象。 加载完这些之后,我正在考虑根据项目的ID进行一次项目特定的REST调用,以获取GET信息。 这带来了一些我不确定REST是否可以解决的问题。
如果设置了source
应用程序上的ID,当它通过REST调用@JoinTable
到target
时,我会担心基于Hibernate @JoinTable
ID的项目关联。 尝试使用从target
到GET item/{id}/relationships
产生问题,因为{id}
来自target
,并且在加载数据后与source
不匹配。
REST或Hibernate中是否可以使用REST调用,基于ID的URL处理大量复杂的自定义关系数据从source
到target
系统,而不会发生冲突或问题?
示例类和数据库(简化了很多代码以忽略某些复杂性):
@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.