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