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