[英]How to Load Collection in hibernate which fetch type is Lazy?
我在项目中使用的是Hibernate,Spring和Dozer。
我的问题是我无法加载延迟获取Collection(List)。 我正在使用推土机将实体类转换为(Dto)类。 我认为推土机用户知道这些事情。
当我调试时,我从实体类中的数据库中获取了所有数据,但是当我通过推土机转换为Dto时,在懒惰获取的Collection中得到了空值。
请帮我在这里。 提前致谢!
将实体转换为Dto时,无法获得开发人员列表。 我有确切的Dto类名称Developer
和Founder
并将它们映射在String Configuration File中。 我尝试了@Select
On @Select
表,然后将其加载并正常工作,但我不希望这样。 如果我必须在我的servicemanager类中增加其他功能,请帮助我。
@Entity
@Table(name = "table")
public class Founder {
@Id
@Column(name = "foun_id")
@GeneratedValue(generator = "uuid")
private String id;
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL, optional = false)
@JoinColumn(name = "reg_address_id")
private Address registeredAddress;
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "jointable", joinColumns = { @JoinColumn(name = "foun_id", nullable = false) }, inverseJoinColumns = { @JoinColumn(name = "dev_id", nullable = true) })
private List<Developer> developer;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Address getRegisteredAddress() {
return registeredAddress;
}
public void setRegisteredAddress(Address registeredAddress) {
this.registeredAddress = registeredAddress;
}
public List<Developer> getDeveloper() {
return developer;
}
public void setDeveloper(List<Developer> developer) {
this.developer = developer;
}
}
@Entity
@Table(name = "tbl")
public class Developer {
@Id
@Column(name = "dev_id")
@GeneratedValue(generator = "uuid")
private String id;
@Column(name = "file_number")
private String fileNumber;
@Column(name = "flat_info")
private String flatInfo;
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL, optional = false)
@JoinColumn(name = "address_id")
private Address address;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getFileNumber() {
return fileNumber;
}
public void setFileNumber(String fileNumber) {
this.fileNumber = fileNumber;
}
public String getFlatInfo() {
return flatInfo;
}
public void setFlatInfo(String flatInfo) {
this.flatInfo = flatInfo;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
正如我在评论中所写,最有可能直接访问Founder
和Developer
Dozer访问字段,而忽略获取方法。 由于Hibernate创建了用于延迟加载的代理,因此转换后最终将得到空集合。 考虑更改您的类以将映射信息添加到getter而不是字段。
这个问题可能对您有用- 是否可以配置Dozer,以便默认情况下可以直接通过setter- / getter方法访问字段
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.