我有一个模型对象关系,例如:
@Table(name="cables")
class Cable {
@Id
private Long id;
@Column(name="dstport_id")
private Port dstPort;
@Column(name="srcport_id")
private Port srcPort;
}
@Table(name="ports")
class Port {
@Id
private Long id;
private Cable cable; // Here's the mapping that should point to cables.dstport_id or cables.srcport_id whatever is present
}
在此关系中,映射是通过Cable的dstport_id OR srcport_id列进行的一对一映射。电缆可以连接到任何一个,一个或两个(完全不同的)端口。端口可以连接到没有或只连接一根电缆,也可以连接到任一端点。那么,在Hibernate中是否有一种方法可以在Port实体中映射这样的关系(在Cable实体中没有把它映射到它的技巧)?
答案 0 :(得分:2)
我认为不可能在Port中定义从Port到Cable的关系,只有一个关联。
在我看来,您最好的选择是使用'mappedBy'连接方法定义2个可选的一对一关联到Port in Port(dstPortCable
和srcPortCable
),然后在Port中定义一个方法:
public Cable getCable() {
if (dstPortCable != null) {
return dstPortCable;
}
if (srcPortCable != null) {
return srcPortCable;
}
return null;
}
答案 1 :(得分:0)
据我了解,您需要One to Many mapping ( Cable to Port) in Cable.java
和One to One mapping in Port.java
类。
因此,在Calble.java中,您可以执行以下操作 -
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "srcport_id",nullable=false)
@ForeignKey(name = "fk_srcport_id")
private List<Port > ports= new ArrayList<Port >();
并在Port.java中 -
@OneToOne(fetch=FetchType.LAZY)
@JoinColumn(name = "srcport_id", updatable = false, insertable = false, nullable=false)
private Calble Calble;