gpt4 book ai didi

java - 为什么此 HQL 搜索查询不起作用?

转载 作者:行者123 更新时间:2023-12-01 23:07:38 24 4
gpt4 key购买 nike

我有以下模型;

  • 我有用户、规则和团队
  • 一个用户可以添加到 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" ,joinColumns=@JoinColumn
(name=RuleEntity.RULE_ID, referencedColumnName="ID", insertable = true, updatable = false, nullable = false),
inverseJoinColumns=@JoinColumn
(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,joinColumns=@JoinColumn(name=TeamEntity.TEAM_ID, referencedColumnName="ID",
insertable = true, updatable = false, nullable = false),
inverseJoinColumns=@JoinColumn(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 查询,我希望结果不会返回任何用户实体(因为其中没有包含规则 1 的 team5,其中规则 1 包含 john),而是返回 'John'

有谁知道如何调整上述查询,使其按照我所描述的方式工作(即,只有当 3 个都匹配时才返回结果)?

最佳答案

好的,这些是我对此的想法:

您有 3 个表:用户、规则和团队。第一个表包含 paul 和 john。第二个表包含规则1、规则4、规则5。

这些表的连接返回 john -rule1;约翰 - 规则 5; (加入1)

第三个表包含 team1、team4 和 team 5。现在您可以使用此表加入用户。你得到 john-team1;约翰团队 5.(JOIN2)

现在你问 USERS 中是否有 john(是),JOIN1 中有规则 1(是),JOIN2 中有 team5(是)。就这样。

你需要做的就是按照规则加入团队。

从 UserEntity 中选择不同的用户作为用户 将 users.teams 内部加入为团队 内连接 user.rules 作为规则1 内部加入 team.rules 作为规则2
其中 users.username 如:john和规则1.ruleName,如:rule1和规则2.ruleName如:rule1和 team.name 类似:team5。

但是在用户和团队中都有规则是很奇怪的。我会重新考虑这一点。

关于java - 为什么此 HQL 搜索查询不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22504703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com