【发布时间】:2018-04-03 16:03:46
【问题描述】:
我在FabricRoll 和FabricDefect 之间有@OneToMany 关系。
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "fabric_roll_id", referencedColumnName = "fabric_roll_id")
private Set<FabricDefect> fabricDefects = new HashSet<>();
问题是当我通过JpaRepository 函数获得FabricRoll 时
findAll()
关联 FabricDefect 也已加载。
我只想加载 FabricRoll 和 FabricDefect 应该在调用函数 getFabricDefect() 时加载
FabricRollServiceImpl 类
@Component
public class FabricRollServiceImpl implements IFabricRollService{
@Autowired
FabricRollRepository fabricRollRepository;
@Transactional(propagation = Propagation.REQUIRED)
@Override
public List<FabricRoll> getAllFabricRoll() {
FabricRoll fabricRoll1 = new FabricRoll();
fabricRoll1.setBatchNo("34344");
fabricRoll1.setLotNo("425");
fabricRoll1.setPoNo("42");
fabricRoll1.setRollLength(2343);
fabricRoll1.setRollNo("356");
fabricRoll1.setRollWidth(60);
fabricRoll1.setStyleNo("354");
FabricDefect fabricDefect = new FabricDefect();
fabricDefect.setDefectNote("note");
fabricDefect.setDefectPoint(3);
fabricDefect.setSegment(3);
fabricDefect.setYard(42);
Set<FabricDefect> fabricDefects = new HashSet<>();
fabricDefects.add(fabricDefect);
fabricRoll1.setFabricDefects(fabricDefects);
addFabricRoll(fabricRoll1);
FabricRoll fabricRoll = null;
return fabricRollRepository.findAll();
}
@Override
public void addFabricRoll(FabricRoll fabricRoll) {
fabricRollRepository.save(fabricRoll);
}
}
【问题讨论】:
-
这是 OneToMany,你为什么使用 JoinColumn ?
-
显示你在
FabricDefect类中的内容 -
如果你去掉
@Transactional注解,你会看到你会得到LazyInitializationException,这意味着集合没有被加载。 -
这里是同一问题的答案stackoverflow.com/a/42584774/5289288
标签: spring hibernate spring-data-jpa lazy-loading