在JPA @Transactional测试中急切加载

时间:2018-02-27 22:38:05

标签: hibernate jpa spring-boot testing kotlin

我正在尝试进行测试,其中来自一个实体的数据是急切加载的,所以我有一个如下代码:

实体:

@Entity
@Table(name = "tableA")
@NamedEntityGraph(name = "tableA.tableB", attributeNodes = [NamedAttributeNode("tableB")])
class TableA (

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    var id: Int = 0,

    @JoinColumn(name = "table_b_id", referencedColumnName = "id")
    @ManyToOne(optional = false, fetch = FetchType.EAGER)
    @Fetch(FetchMode.JOIN)
    var tableB: TableB? = null
)

存储库:

@Repository
interface tableARepository: JpaRepository<TableA, Int>, JpaSpecificationExecutor<TableA>{

    @EntityGraph(attributePaths = [ "tableB" ])
    fun findByModelId(modelId: Int) : List<DispersionDetail>
}

测试:

@Test
@Transactional
fun disperserTest(){
    //Here the code to create a tableA and the tableB
    val tableAList = tableARepository.findAll()
}

问题是,在调试我的代码时,tableAList属性tableB的结果为空,但是当从测试中删除@Transactional注释时,tableB不是null并且正在急切地加载我想要的东西。

我的问题是为什么会发生这种情况以及如何在测试中加载tableA所有关系(tableB)和@Transactional注释

0 个答案:

没有答案