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 列による 1 対 1 のマッピングです。ケーブルは、1 つまたは 2 つの (完全に異なる) ポートに接続できません。ポートは、ケーブルに接続しないか、または 1 本のケーブルのみに接続し、いずれかのエンドポイントに接続できます。では、Hibernate でそのような関係を Port エンティティ内にマップする方法はありますか (Cable エンティティ内にマップするためのトリックはありません)。

4

2 に答える 2

2

ポート内の1 つの関連付けだけで、ポートからケーブルへの関係を定義することはできないと思います。

私の見解では、「mappedBy」結合メソッドを使用して、2 つのオプションの Cable in Port (dstPortCableおよびなど) への 1 対 1 の関連付けを定義してから、Port でメソッドを定義することをお勧めします。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 に答える