[英]HQL - how to query data from one-to-many relationship and condition on second entity field
這是我在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?
您可以使用點表示法訪問子表,Hibernate將為您處理聯接。
SELECT FROM Friend f WHERE f.friendMember.activate = true
這就是為什么HQL非常好的部分原因。
您的查詢有一些拼寫錯誤。 訪問字段時,應使用字段名稱而不是類型。
嘗試這個:
FROM Friend as f Left join f.friendMember as m WHERE f.memberId = :memberId AND m.activate = true
如果你有其他問題。 請告訴我日志。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.