繁体   English   中英

如何在休眠中加载哪个懒惰的获取类型的集合?

[英]How to Load Collection in hibernate which fetch type is Lazy?

我在项目中使用的是Hibernate,Spring和Dozer。

我的问题是我无法加载延迟获取Collection(List)。 我正在使用推土机将实体类转换为(Dto)类。 我认为推土机用户知道这些事情。

当我调试时,我从实体类中的数据库中获取了所有数据,但是当我通过推土机转换为Dto时,在懒惰获取的Collection中得到了空值。

请帮我在这里。 提前致谢!

将实体转换为Dto时,无法获得开发人员列表。 我有确切的Dto类名称DeveloperFounder并将它们映射在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;
    }
}

正如我在评论中所写,最有可能直接访问FounderDeveloper Dozer访问字段,而忽略获取方法。 由于Hibernate创建了用于延迟加载的代理,因此转换后最终将得到空集合。 考虑更改您的类以将映射信息添加到getter而不是字段。

这个问题可能对您有用- 是否可以配置Dozer,以便默认情况下可以直接通过setter- / getter方法访问字段

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM