2012-04-12 10 views
1

這是我所期待的SQL查詢字符串:HQL - 如何從一個一對多的第二實體領域的關係和狀態查詢數據

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?

+0

在關於'@ OneToMany'的標題中,只有'@ OneToOne'指示。 – 2016-01-24 08:41:23

回答

1

您的查詢有一些錯字。訪問字段時,應該使用字段名稱而不是類型。

試試這個:

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

如果您有其他問題。請給我看日誌。

+0

我已經使用了上面的HQL,但它也是錯誤的。日誌爲:org.hibernate.QueryException:無法解析屬性:使用HQL顯示「我的實體包地址」成員。那麼我應該糾正它? – sokheng 2012-04-12 03:01:17

2

您可以使用點符號訪問子表,並且Hibernate將負責爲您加入連接。

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

這就是爲什麼HQL非常好的原因之一。

相關問題