Java 同一实体的多对多关系

Java 同一实体的多对多关系,java,hibernate,jpa,Java,Hibernate,Jpa,我有一个用户实体,它可以是经理或客户,经理可以有许多客户,客户可以有许多经理 我试图像这样映射用户实体: @Id @GeneratedValue(strategy = AUTO) private UUID uuid; @ManyToMany @JoinTable(name = "managers_clients", joinColumns = { @JoinColumn(name = "clientUuid&q

我有一个
用户
实体,它可以是
经理
客户
经理
可以有许多
客户
客户
可以有许多
经理

我试图像这样映射
用户
实体:


  @Id
  @GeneratedValue(strategy = AUTO)
  private UUID uuid;

  @ManyToMany
  @JoinTable(name = "managers_clients",
      joinColumns = {
          @JoinColumn(name = "clientUuid", referencedColumnName = "uuid", nullable = false)},
      inverseJoinColumns = {
          @JoinColumn(name = "managerUuid", referencedColumnName = "uuid", nullable = false)})
  private List<UserEntity> managers;


  @ManyToMany(mappedBy = "managers")
  private List<UserEntity> clients;

@身份证
@生成值(策略=自动)
私有UUID-UUID;
@许多
@JoinTable(name=“managers\u clients”,
joinColumns={
@JoinColumn(name=“clientUuid”,referencedColumnName=“uuid”,nullable=false)},
反向连接列={
@JoinColumn(name=“managerUuid”,referencedColumnName=“uuid”,nullable=false)})
私人名单管理人;
@许多人(mappedBy=“经理人”)
私人名单客户;
但不幸的是,我有一个错误:

未能延迟初始化角色集合:com.company.domain.common.entities.UserEntity.managers,无法初始化代理-无会话


有人能解释为什么会发生这种情况,以及我如何克服这个问题吗?非常感谢

问题是在获取数据期间没有会话。 我不确定从何处获取数据,但请尝试将@Transactional添加到此方法中


这将确保JPA使用会话获取数据。

看起来您正在尝试在会话关闭后获取延迟加载的集合。有更多的信息。快速修复方法是急切地获取集合(
@manytomy(fetch=FetchType.EAGER)
),但这会影响此实体上的所有查询,因为所有
管理器
都始终被获取。正确的方法是在会话仍然打开的时间点(即在
@Transactional
方法中)访问集合。@Turing85如何实现
@Transactional
方法?
@Transactional
是CDI注释。您只需使用它来注释一个方法。其余部分通过JPA和CDI容器完成(CDI容器将生成一个代理对象,该对象包装实际实现,并添加代码以开始和提交事务方法上的事务)。我建议您提供更多信息。