在arraylist中查询spring boot h2中的一个元素

Query in arraylist by one element in spring boot h2

我的 Spring 启动应用程序中有一个 ClassRoom class。这是它的样子:

public class ClassRoom {

@Id @GeneratedValue Long classRoomID;

ArrayList<User>adminList=new ArrayList<>();
}

在我的 ClassRoomRepository class 中,我有 :

public interface ClassRoomRepository extends JpaRepository<ClassRoom,Long> {

@Query("select ClassRoom from ClassRoom c where c.adminList = ?1")
ArrayList<ClassRoom> findByAdminList(ArrayList<User> adminList);
/*
@Query("select ClassRoom from ClassRoom c where c. = ?1")
ArrayList<ClassRoom> findByAdmin(User admin);
*/
}

我可以查询 select ClassRoom,其中 ClassRoomArrayList 获取传递的参数。

但我想查询 select ClassRoom where 我只传递一个 User 作为参数和 returns ArrayList ClassRoom.(评论部分-到目前为止什么都没做)

如果在这个界面可以,我该怎么做?

假设您使用连接 table 建立多对多关联,这就是您所需要的,

 @Query(value = "SELECT DISTINCT cr FROM ClassRoom cr JOIN cr.admins a WHERE a = ?1")
 List<ClassRoom> findAllByAdmin(final Admin admin);

映射集合时,Hibernate 要求它声明它 using interface type 例如 ListSetMap 等。但是你正在使用 ArrayList为了声明管理列表,我猜测整个列表将存储到 DB 中具有某种二进制数据类型的单个列中。在使用 RDBMS 时,没有人会以这种有趣的方式存储数据,除非您有充分的理由这样做。

根据您的描述,ClassRoomUser 似乎是多对多。为了演示方便,我将其映射为 @ManyToMany:

@Entity
@Table
public class ClassRoom {

    @ManyToMany
    @JoinTable(name ="classroom_user",
             joinColumns = @JoinColumn(name = "classroom_id"),
            inverseJoinColumns = @JoinColumn(name = "user_id"))
    private List<User> admins = new ArrayList();
}
@Entity
@Table
public class User{

        @ManyToMany(mappedBy = "admins")
        private List<ClassRoom> classRooms  = Lists.newArrayList();
}

然后给定一个用户 admin ,以获得他的所有管理 class 房间:

@Query("select distinct cr from ClassRoom cr left join fetch cr.admins admin where admin = ?1 ")
public List<ClassRoom> findByAdmin(User admin); 

或:

@Query("select distinct cr from ClassRoom cr where ?1 member of cr.admins")
public List<ClassRoom> findByAdmin(User admin);