我正在处理视图图层上具有双列表选择框的功能。有大约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
。
业务逻辑是一个或多个Structure
是Contract
的一部分,可能只有一个或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()
的方法的性能?