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容器将生成一个代理对象,该对象包装实际实现,并添加代码以开始和提交事务方法上的事务)。我建议您提供更多信息。