1

これは、SQLクエリ文字列で期待したものです:

SELECT     dbo.FRIEND.FriendId, dbo.FRIEND.MemberId, dbo.FRIEND.FriendMemberId, dbo.FRIEND.DateAdded
FROM         dbo.FRIEND INNER JOIN
                      dbo.MEMBER ON dbo.FRIEND.FriendMemberId = dbo.MEMBER.MemberId
WHERE     (dbo.MEMBER.Activate = 1)

これは関係を持つ私のエンティティです:エンティティフレンドフィールド

@Id
@Column(name = "[FriendId]")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long              friendId;

@Column(name = "[MemberId]")
private Long              memberId;

@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "[FriendMemberId]")
private Member            friendMember;

@Column(name = "[DateAdded]")
private Date              dateAdded;

エンティティ メンバー フィールド

@Id
@Column(name = "[MemberId]")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long              memberId;

@Column(name = "[Activate]", columnDefinition = "boolean default true")
private boolean           activate;

ここに私のHQLクエリがあります:

FROM Friend as f Left join f.Member as m WHERE f.MemberId = :memberId AND m.activate = true

しかし、私はエラーが発生しました。では、データを取得する HQL クエリをどのように記述すればよいでしょうか。その条件は member.activate に依存します。

4

2 に答える 2

2

ドット表記を使用してサブテーブルにアクセスでき、Hibernateが結合を処理します。

SELECT FROM Friend f WHERE f.friendMember.activate = true

これが、HQLが非常に優れている理由の一部です。

于 2012-06-14T22:50:33.930 に答える
1

クエリにタイプミスがあります。フィールドにアクセスするときは、タイプではなくフィールド名を使用する必要があります。

これを試して:

FROM Friend as f Left join f.friendMember as m WHERE f.memberId = :memberId AND m.activate = true

他に問題がある場合。ログを見せてください。

于 2012-04-12T02:52:11.560 に答える