簡體   English   中英

HQL - 如何在第二個實體字段上查詢一對多關系和條件中的數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM