我有以下模型;为什么这个HQL搜索查询不起作用?
- 我有用户和规则和团队
- 用户可以添加到0,1个或多个规则
- 用户可以添加到0,1人以上的团队
- 一个规则可以是加入只有一支球队,而是一个团队可以包含很多不同的规则
- 规则可以包含0个,1个或多个用户
这里是UserEntity类:
class UserEntity {
private String username;
private List<TeamEntity> teams;
private List<RuleEntity> rules;
@Column(name = "username", nullable = false, unique = true)
public String getUsername() {
return username;
}
@ManyToMany(mappedBy="users" , fetch = FetchType.LAZY)
public List<RuleEntity> getRules() {
return rules;
}
@ManyToMany(mappedBy="users" , fetch = FetchType.LAZY)
public List<TeamEntity> getTeams() {
return teams;
}
...
}
而且RuleEntity类:
class RuleEntity {
private String name;
private List<UserEntity> users;
private TeamEntity ownerTeam;
@Column(name = "name", nullable = false)
public String getRuleName() {
return ruleName;
}
@ManyToOne
@JoinColumn(name=TeamEntity.TEAM_ID, nullable = false)
public TeamEntity getOwnerTeam() {
return ownerTeam;
}
@ManyToMany (fetch = FetchType.LAZY)
@JoinTable(name= "RULE_USER" ,[email protected]
(name=RuleEntity.RULE_ID, referencedColumnName="ID", insertable = true, updatable = false, nullable = false),
[email protected]
(name=UserEntity.USER_ID, referencedColumnName="ID", insertable = true, updatable = false, nullable = false),
uniqueConstraints = @UniqueConstraint(columnNames = {RuleEntity.RULE_ID, UserEntity.USER_ID}))
public List<UserEntity> getUsers() {
return users;
}
...
}
而且TeamEntity类:
class TeamEntity {
private String name
private List<UserEntity> users;
private List<RuleEntity> rules;
@ManyToMany (fetch = FetchType.LAZY)
@JoinTable(name= TeamEntity.TEAM_USER_TABLE,[email protected](name=TeamEntity.TEAM_ID, referencedColumnName="ID",
insertable = true, updatable = false, nullable = false),
[email protected](name=TeamEntity.USER_ID, referencedColumnName="ID",
insertable = true, updatable = false, nullable = false),
uniqueConstraints = @UniqueConstraint(columnNames = {TeamEntity.TEAM_ID, TeamEntity.USER_ID}))
public List<UserEntity> getUsers() {
return users;
}
@OneToMany (mappedBy = "ownerTeam", cascade = {CascadeType.ALL}, orphanRemoval=true)
public List<RuleEntity> getRules() {
return rules;
}
...
}
因此,考虑到我有以下模型创建:
/**
* <pre>
* Team ("team1")
* |
* Rule ("rule1")
* | |
* User ("john")
* </pre>
*/
/**
* <pre>
* Team ("team4")
* |
* Team ("team5")
* | |
* Rule ("rule4") Rule ("rule5")
* | |
* User ("paul") User("john")
* </pre>
*/
我想实现搜索,用户可以使用用户名进行搜索,团队名称和规则名称,我......所以3必须匹配才能返回任何结果。目前,我有以下的,以回报广大用户相匹配的3检索词:
select distinct users from UserEntity as users inner join users.rules as rules inner join users.teams as teams where users.username like :john and rules.ruleName like :rule1 and teams.name like :team5
因此,使用上面的HQL查询,我希望得到的结果没有返回用户实体(因为在它的Rule1没有team5,其中规则1有约翰),但相反,它是返回'约'
有谁知道如何调整上述查询,使其工作正如我所描述的(即它应该只返回一个结果,当所有3比赛)?
谢谢@sergiu,我是SQL/HQL的新手,这很好解释! – user2586917