在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
,其中 ClassRoom
的 ArrayList
获取传递的参数。
但我想查询 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 例如 List
, Set
, Map
等。但是你正在使用 ArrayList
为了声明管理列表,我猜测整个列表将存储到 DB 中具有某种二进制数据类型的单个列中。在使用 RDBMS 时,没有人会以这种有趣的方式存储数据,除非您有充分的理由这样做。
根据您的描述,ClassRoom
和 User
似乎是多对多。为了演示方便,我将其映射为 @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);
我的 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
,其中 ClassRoom
的 ArrayList
获取传递的参数。
但我想查询 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 例如 List
, Set
, Map
等。但是你正在使用 ArrayList
为了声明管理列表,我猜测整个列表将存储到 DB 中具有某种二进制数据类型的单个列中。在使用 RDBMS 时,没有人会以这种有趣的方式存储数据,除非您有充分的理由这样做。
根据您的描述,ClassRoom
和 User
似乎是多对多。为了演示方便,我将其映射为 @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);