我有以下模型;爲什麼這個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