使用spring boot和hibernate,假设我有UserEntity
个子TrailEntity
列表:
@Entity
@Table(name = "USER")
public class UserEntity {
@OneToMany(cascade=CascadeType.ALL)
@LazyCollection(LazyCollectionOption.FALSE)
@JoinColumn(name="userID")
private List<TrailEntity> trails = new ArrayList<>();
}
当我添加新的TrailEntity
并保存时,它工作正常,UserEntity.trails
包含新的TrailEntity
个对象。
userEntity.getTrails().add(trailEntity);
userService.save(userEntity);
但是,孩子的另一个列表会被保存但不会被加载:
@Entity
@Table(name = "TRAIL")
public class TrailEntity {
@OneToMany(cascade=CascadeType.ALL)
@LazyCollection(LazyCollectionOption.FALSE)
@JoinColumn(name="TrailID")
private List<ImageEntity> images = new ArrayList<>();
}
当我这样做时:
userEntity.getTrails(0).getImages().add(imageEntity);
userService.save(userEntity);
userEntity = userService.findByUsername(USERNAME);
userEntity.getTrails(0).getImages().size()
为0。
即。保存链接到ImageEntity
的{{1}}个对象,但是有没有办法在JPA(hibernate)中一直加载到层次结构中?
答案 0 :(得分:0)
原来它归结为ImageEntity
中的另一个实体:
@Entity
@Table(name = "IMAGE")
public class ImageEntity {
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="BeaconID", nullable=false)
private BeaconEntity beaconEntity;
}
但它从未使用过,导致由于ImageEntity
而无法从数据库加载关联的nullable=false
对象。
nullable=false
删除ImageEntity.beaconEntity
(默认为true)解决了问题