gpt4 book ai didi

java - 如何在 hibernate 中加载集合,其中获取类型是惰性的?

转载 作者:行者123 更新时间:2023-11-30 11:19:47 24 4
gpt4 key购买 nike

我在我的项目中使用了 Hibernate、Spring 和 Dozer。

我的问题是我无法加载延迟获取集合(列表)。我正在使用 Dozer 将实体类转换为 (Dto) 类。我认为 Dozer 用户知道这些事情。

当我调试时,我从实体类中的 DB 获取所有数据,但是当我通过 Dozer 转换为 Dto 时,我在 Lazy Fetched 的 Collection 中得到 null。

请帮帮我。提前致谢!

当我将实体转换为 Dto 时,我无法获得开发人员列表。我有确切的 Dto 类名称 DeveloperFounder 并将它们映射到字符串配置文件中。我尝试了 @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 很可能直接访问 FounderDeveloper 的字段并忽略 getter。当 Hibernate 为延迟加载创建代理时,这在转换后以空集合结束。考虑更改您的类以将映射信息添加到 getter 而不是字段。

这个问题可能对您有用 - Is it possible to configure Dozer such that by default fields are rather accessed directly that through setter-/getter method

关于java - 如何在 hibernate 中加载集合,其中获取类型是惰性的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23082445/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com