Spring jpa fetch eager not working on findById



我正在使用 spring 和 hibernate 作为我的 java 对象。

我有一个这样的实体:

@Entity
@Table
public class Function implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
/** Code value. */
private String code;
}

另一个引用第一个实体的实体,例如

@Entity
@Table(name = "role", uniqueConstraints = { @UniqueConstraint(columnNames = { "id" }),  @UniqueConstraint(columnNames = { "code" }) })
public class RoleDef extends CodeLabelEntity{
...some other primitive type...
/** List of functions */
@OneToMany(fetch = FetchType.EAGER)
@JoinTable(name = "role_function",
joinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "function_code", referencedColumnName = "code"))
private Set<Function> functions;
}

我正在使用这样的存储库:

public interface RoleDefRepository extends JpaRepository<RoleDef, Long>, QuerydslPredicateExecutor<RoleDef> {
}

当我在我的角色中做时:

roleDefRepository.findAll();

我可以迭代 RoleDef 和函数,因为 EAGER 可以完成这项工作 但是当我尝试这样做时:

RoleDef roleDef = roleDefRepository.findById(id).orElse(null);

我在角色定义中设置的函数是空的。 findById 没有被覆盖,它是像 findAll 这样的默认方法。

如果你看到一些我省略的东西......

我正在使用最新版本的弹簧/休眠

谢谢

我通过在存储库中执行此操作解决了我的问题:

@Query("select r from RoleDef r join fetch r.functions where r.id = ?1")
Optional<RoleDef> findByIdWithFunctionTree(Long id);

但是,如果有人可以找到真正的问题,因为我认为 EAGER 在关系上或通过交易仍然打开时的获取访问将与获取相同......

最新更新