0

我有一个模型对象关系,例如:

@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 或 srcport_id 列的一对一映射。一根电缆可以连接到一个、一个或两个(完全不同的)端口。端口可以​​不连接或仅连接一根电缆,并且可以连接到任一端点。那么,在 Hibernate 中有没有办法在 Port 实体中映射这种关系(在 Cable 实体中映射它没有技巧)?

4

2 回答 2

2

我不相信只有在端口中的一个关联来定义从端口到电缆的关系是可能的。

dstPortCable在我看来,您最好的选择是使用“mappedBy”连接方法在端口(和,比如说)中定义 2 个可选的一对一关联到电缆srcPortCable,然后在端口中定义一个方法,因此:

public Cable getCable() {
    if (dstPortCable != null) {
        return dstPortCable;
    }
    if (srcPortCable != null) {
        return srcPortCable;
    }
    return null;
}
于 2012-09-06T04:33:34.433 回答
0

据我所知,您需要One to Many mapping ( Cable to Port) in Cable.javaOne 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;    
于 2012-09-05T08:23:07.487 回答