我正在尝试进行测试,其中来自一个实体的数据是急切加载的,所以我有一个如下代码:
实体:
@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
注释