0

私は以下のシナリオを持っています:

class GraphUser {

    @Column(name="first_name")
    private String firstName = "";

    @Column(name="middle_name")
    private String middleName = "";

    @Column(name="last_name")
    private String lastName = "";

    @Column(name="start_point")
    private String startPointId = "";

    @ManyToMany(fetch = FetchType.EAGER, mappedBy = "points")

    private HashMap<Point> points= new HashMap<Point>();

    private Point startPoint = points.get(startPointId);

}

適切な値を取得するために、startPoint 属性を作成する前に hibernate に startPointId を取得させる方法はありますか?

4

2 に答える 2

1

プロパティは必要ありません。一時的なゲッターを使用するだけです。開始点を取得する必要があるたびに呼び出します。

@Transient
public Point getStartPoint() {
   return points.get(startPointId);
}

これは問題なく動作し ( FetchTypeofpointsがである場合EAGER)、Hibernate は安全に無視します。実際には、毎回
クエリを実行するとパフォーマンスがわずかに低下する可能性がありますが、気にする必要はありません。HashMap

HashMapさらに、の宣言をpointswithに置き換えることをお勧めしますMap

@ManyToMany(fetch = FetchType.EAGER, mappedBy = "points")
private Map<Point> points = new HashMap<Point>();

(それに応じてゲッターとセッターを更新します)

于 2013-02-25T22:02:34.397 に答える
0

startPointのセッターでstartPointId、または のゲッターで代入を行いますstartPoint。そして、startPointおそらくHibernateはそれをいじりませtransient@Transient

public void setStartPointId(String startPointId) {
    this.startPointId = startPointId;
    this.startPoint = points.get(startPointId);
}

// or

public Point getStartPoint() {
    if (this.startPoint == null) {
        this.startPoint = points.get(startPointId);
    }
    return this.startPoint;
}

public void setStartPointId(String startPointId) {
    this.startPointId = startPointId;
    this.startPoint = null;
}
于 2013-02-25T22:01:56.100 に答える