5

私はこれらのエンティティを持っています:

@Entity
public class Room {

    @ManyToOne(optional=true,fetch=FetchType.LAZY)
    private Player player1;

    ...

}

@Entity
public class Player {

    @Id
    @Column(updatable=false)
    private long id;

    public long getId() {
        return id;
    }

    ...

}

さて、この声明はRoom...

player1.getId();

...そのエンティティ全体Playerがデータベースから取得されます。ただし、すでに持っているはずの主キーだけが必要ですid(そうでなければ、どのようにデータを取得できますか?)。

データベース アクセスをトリガーせずに遅延Playerプロキシにアクセスするにはどうすればよいですか?id

4

3 に答える 3

1

@Column private long playerIdRoom エンティティの属性を持つことができます。トランザクションで Player オブジェクト全体を呼び出さなくても、この属性を呼び出して ID を取得できます。

これは、playerId が Room エンティティ テーブル (またはビューなど) にも格納されている場合にのみ機能しますが、最初に参加できるようにする必要があるため、そうである必要があると思います。

編集:@Adam Dygaが後述するように、これらはfalseとして挿入および更新可能である必要があります

@Entity
public class Room {

    @ManyToOne(optional=true,fetch=FetchType.LAZY)
    private Player player1;
    @Column(name="id", insertable = false, updatable = false) 
    private long playerId
    ...

}
于 2013-04-11T10:08:59.890 に答える
0

私はより簡単な解決策を見つけましたgetId() final。これにより、Hibernate がプロキシの遅延フェッチ アクションでオーバーライドするのを防ぐことができるため、既知の ID を返すだけで、問題は発生しません。

于 2015-04-08T12:50:29.663 に答える