Spring 在多对多中,只获取id而不是整个对象 公共类角色{ @许多 @JoinTable(name=“用户到角色”, joinColumns=@JoinColumn(name=“role\u id”), inverseJoinColumns=@JoinColumn(name=“user\u id”,referencedColumnName=“id”)) 私人用户; } 公共类用户{ @许多 @JoinTable(name=“用户到角色”, joinColumns=@JoinColumn(name=“user\u id”), inverseJoinColumns=@JoinColumn(name=“role\u id”)) 私人设定角色; }

Spring 在多对多中,只获取id而不是整个对象 公共类角色{ @许多 @JoinTable(name=“用户到角色”, joinColumns=@JoinColumn(name=“role\u id”), inverseJoinColumns=@JoinColumn(name=“user\u id”,referencedColumnName=“id”)) 私人用户; } 公共类用户{ @许多 @JoinTable(name=“用户到角色”, joinColumns=@JoinColumn(name=“user\u id”), inverseJoinColumns=@JoinColumn(name=“role\u id”)) 私人设定角色; },spring,Spring,这两个类之间有一种多对多的关系。调用role.getUsers()时,我只想获取用户ID,其余字段应该被忽略,因为将有大量数据,我不想加载所有内容,如何实现这一点?一种简单的方法是使用条件查询,但在实体中使用它,您必须在那里注入一个EntityManager,这被认为是一种糟糕的做法。更好的解决方案是在服务中创建此查询 但是如果您仍然想这样做,那么您的getUsers方法将如下所示: public class Role { @ManyToMany @JoinTable(name = &quo

这两个类之间有一种多对多的关系。调用
role.getUsers()
时,我只想获取用户ID,其余字段应该被忽略,因为将有大量数据,我不想加载所有内容,如何实现这一点?

一种简单的方法是使用
条件查询,但在
实体中使用它,您必须在那里注入一个
EntityManager
,这被认为是一种糟糕的做法。更好的解决方案是在
服务中创建此查询

但是如果您仍然想这样做,那么您的
getUsers
方法将如下所示:

public class Role {

 @ManyToMany
@JoinTable(name = "user_to_role",
        joinColumns = @JoinColumn(name = "role_id"),
        inverseJoinColumns = @JoinColumn(name = "user_id",referencedColumnName = "id"))
private Set<User> users;
}

public class User {

  @ManyToMany
@JoinTable(name = "user_to_role",
        joinColumns = @JoinColumn(name = "user_id"),
        inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles;
}
公共列表getUsers(){
Criteria cr=entityManager.createCriteria(User.class)
.setProjection(Projections.projectionList()项目)
.add(Projections.property(“id”),“id”)
.setResultTransformer(Transformers.aliasToBean(User.class));
List=cr.List();
退货清单;
}

如果您想限制列表,只需使用
限制
,如:
criteria.add(Restrictions.eq(“id”,yourRestrictedId))

一种简单的方法是使用
条件查询
,但要在
实体
中使用它,必须在那里插入
实体管理器
,这被认为是一种不好的做法。更好的解决方案是在
服务
中创建此查询

但是如果您仍然想这样做,那么您的
getUsers
方法将如下所示:

public class Role {

 @ManyToMany
@JoinTable(name = "user_to_role",
        joinColumns = @JoinColumn(name = "role_id"),
        inverseJoinColumns = @JoinColumn(name = "user_id",referencedColumnName = "id"))
private Set<User> users;
}

public class User {

  @ManyToMany
@JoinTable(name = "user_to_role",
        joinColumns = @JoinColumn(name = "user_id"),
        inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles;
}
公共列表getUsers(){
Criteria cr=entityManager.createCriteria(User.class)
.setProjection(Projections.projectionList()项目)
.add(Projections.property(“id”),“id”)
.setResultTransformer(Transformers.aliasToBean(User.class));
List=cr.List();
退货清单;
}

如果您想限制列表,只需使用
限制
,如:
criteria.add(Restrictions.eq(“id”,yourRestrictedId))

因为您已经使用
@manytomy
关系映射了实体用户和角色,所以您需要创建一个DAO/服务类来实现业务逻辑,以便只过滤用户ID并返回相同的用户ID

这不能在
Model\Entity
类中处理,因为它将挑战对象关系映射的整个概念

如果您愿意,我可以使用DAO为您的示例创建业务逻辑,但您将获得10个实现相同功能的博客


作为参考,您可以查看我的示例项目。

因为您已经使用
@manytomy
关系映射了实体用户和角色,所以您需要创建一个DAO/服务类来实现业务逻辑,以仅过滤用户ID并返回相同的用户ID

这不能在
Model\Entity
类中处理,因为它将挑战对象关系映射的整个概念

如果您愿意,我可以使用DAO为您的示例创建业务逻辑,但您将获得10个实现相同功能的博客


供您参考,您可以查看我的示例项目。

我不需要所有id,只需要那些与特定roleOk有连接的id,因此您肯定需要一个
UserService
@СааМаааааааааааааааааа我需要一个
用户服务
@Саааааааааааааа107