繁体   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