gpt4 book ai didi

java - 无法在 spring-data 中写入正确的请求

转载 作者:行者123 更新时间:2023-12-02 11:09:50 25 4
gpt4 key购买 nike

我正在使用 spring-boot ,并拥有这 3 个实体:

实体应用程序用户

@Entity
@Data
@AllArgsConstructor @NoArgsConstructor
public class AppUser implements Serializable {

@Id @GeneratedValue
private Long id;
@Column(unique = true)
private String username;
private String password;
private String prenom;
private String nom;
private Long tel;
private String cin;
private String email ;
@ManyToMany(fetch = FetchType.EAGER)
private Collection<AppRole> roles = new ArrayList<>();


@OneToMany(mappedBy = "appUser" )
@Fetch(value = FetchMode.SUBSELECT)
@JsonManagedReference(value="appuser-contrat")
private Collection<Contrat> contrats = new ArrayList<Contrat>();



public void addToContrats(Contrat contrat){
this.contrats.add(contrat);
}


}

实体契约(Contract)

@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Contrat implements Serializable{

@Id @GeneratedValue
private Long id;
private Date dateDebut ;
private Date dateFin ;
private Long idDevloppeur;
@ManyToOne
@JoinColumn(name = "Id_Project")
@JsonBackReference(value="projet-contrat")
private Project project;

@ManyToOne
@JoinColumn(name = "Id_AppUser")
@JsonBackReference(value="appuser-contrat")
private AppUser appUser;


}

实体项目

@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Project implements Serializable{

@Id @GeneratedValue
private long id;
private String intitule;
private String description;

@OneToMany(mappedBy = "project" )
@Fetch(value = FetchMode.SUBSELECT)
@JsonManagedReference(value="projet-contrat")
private Collection<Contrat> contrats = new ArrayList<Contrat>();



public void addToContrats(Contrat contrat){
this.contrats.add(contrat);
}



}

这是我正在使用的映射:

-AppUser 和 Contrat 之间的 One_to_many 。

-项目和契约(Contract)之间的一对多。

所以 Contrat 位于 AppUser 和 Project 之间。

我正在尝试在存储库中编写请求以获取没有指定项目的 AppUser 列表。

我试过了

@Query("select u from AppUser u inner join u.roles r inner join u.contrats c where r = :role and c.appUser not in (" +
"select d.appUser from Contrat d where d.project = :project )")

所以我想获取没有这个项目':project'的用户列表

但我得到一个空列表,而我应该获取所有 AppUsers 的列表,因为在我的应用程序中还没有任何 appuser 的项目。

知道如何写这个请求吗?

最佳答案

首先,我假设这是 spring-data-jpa,以 Hibernate 作为底层实现。

我的 HQL 有点生疏,但这样的东西应该可以工作:

select u from AppUser u inner join u.roles r inner join u.contrats c where r = :role and not exists ( from c.project p where p != :project)

这是一篇好文章:http://www.codewrecks.com/blog/index.php/2010/03/09/power-of-hql-condition-on-a-collection/

关于java - 无法在 spring-data 中写入正确的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50690528/

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