作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的项目中使用了 Hibernate、Spring 和 Dozer。
我的问题是我无法加载延迟获取集合(列表)。我正在使用 Dozer 将实体类转换为 (Dto) 类。我认为 Dozer 用户知道这些事情。
当我调试时,我从实体类中的 DB 获取所有数据,但是当我通过 Dozer 转换为 Dto 时,我在 Lazy Fetched 的 Collection 中得到 null。
请帮帮我。提前致谢!
当我将实体转换为 Dto 时,我无法获得开发人员列表。我有确切的 Dto 类名称 Developer
和 Founder
并将它们映射到字符串配置文件中。我尝试了 @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;
}
}
最佳答案
正如我在评论中所写,Dozer 很可能直接访问 Founder
和 Developer
的字段并忽略 getter。当 Hibernate 为延迟加载创建代理时,这在转换后以空集合结束。考虑更改您的类以将映射信息添加到 getter 而不是字段。
关于java - 如何在 hibernate 中加载集合,其中获取类型是惰性的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23082445/
我是一名优秀的程序员,十分优秀!