简体   繁体   English

HQL - 如何在第二个实体字段上查询一对多关系和条件中的数据

[英]HQL - how to query data from one-to-many relationship and condition on second entity field

This is what i expected in SQL query string: 这是我在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)

This is my entities with relationship : Entity Friend field 这是我的关系实体:实体朋友字段

@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;

Entity Member field 实体成员字段

@Id
@Column(name = "[MemberId]")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long              memberId;

@Column(name = "[Activate]", columnDefinition = "boolean default true")
private boolean           activate;

Here is my HQL query : 这是我的HQL查询:

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

but i got error. 但我得到了错误。 so how should i write HQL query get data and its condition depend on member.activate ? 那么我应该如何编写HQL查询获取数据,其条件取决于member.activate?

You can access subtables using the dot notation and Hibernate will take care of the join for you. 您可以使用点表示法访问子表,Hibernate将为您处理联接。

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

That's part of why HQL is so nice. 这就是为什么HQL非常好的部分原因。

Your query has some typo. 您的查询有一些拼写错误。 You should use field name instead of type when you access to field. 访问字段时,应使用字段名称而不是类型。

Try this: 尝试这个:

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

If you have other problem. 如果你有其他问题。 Please show me the log. 请告诉我日志。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM