Spring MVC + Thymeleaf - 非常大的列表上的低性能(20,000多个项目)

时间:2016-05-17 15:08:19

标签: java hibernate spring-mvc one-to-many many-to-one

我正在处理视图图层上具有双列表选择框的功能。有大约20,000个可用项目被带到选择,并且需要很长时间来加载页面并且每次交互(在过滤器框上键入,从列表中选择项目等)需要很长时间来处理

有没有办法加快速度?

我的表格是:

<form role="form" action="#" th:object="${pojo}" th:action="@{/contract/assignStructure}" method="post">
    <select multiple="multiple" id="selectedStructures" name="selectedStructures" class="form-control">
        <option th:each="structure : ${allStructures}" 
                th:value="${structure.getId()}"
                th:selected="${assignedStructures.contains(structure)}"
                th:text="${structure.description}">
        </option>
    </select>
    <br />
    <div>
        <button type="submit" class="btn btn-primary" th:text="#{gen.save}">Save</button>
    </div>  
</form>

到目前为止,处理此列表的javascript部分是:

$('#selectedStructures').bootstrapDualListbox();

问题,我相信在我的Structure pojo中,其属性定义为:

@Column(name = "description")
private String description;

@ManyToOne(fetch = FetchType.EAGER)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
private Contract contract;

@OneToMany(fetch = FetchType.LAZY)
@Fetch(FetchMode.SELECT)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
private List<Term> terms;

可能性能问题与FetchType

有关

业务逻辑是一个或多个StructureContract的一部分,可能只有一个或Term

Contract上的映射是:

@OneToMany(fetch = FetchType.EAGER)
@Fetch(FetchMode.SELECT)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
private List<Structure> structures;

Term上的映射是:

@ManyToOne(fetch = FetchType.EAGER)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
private Structure structure;

这是对的吗?有没有办法通过调整注释来提高检索List<Structure> findAll()的方法的性能?

0 个答案:

没有答案