在spring / hibernate中,处理需要在不同情况下使用的数据子集的最佳方法是什么?
我有一个spring mvc app,使用hibernate为MySQL中的大型数据库创建一个接口,每个表有数百万行。应用程序中的某些JSP视图只与给定表中可能包含100,000行的给定子集进行交互,这些行总共可能有10,000,000行。我希望视图能够快速检索数据,因此我尝试创建一个包含100,000行的新数据库表,并与新实体匹配以映射到新数据库表。但这可能会导致代码复杂化。什么是更好的方法来获得仅使用数据子集的速度改进?
这是我到目前为止所做的:
@Entity
@Table(name = "conc_dual_key")
public class ConcDualKey {
@Id
@Column(name="dualkey")
private String name;
@ManyToMany(cascade = {CascadeType.ALL})//
@JoinTable(name="conc_dual_key_junction_new",
joinColumns={@JoinColumn(name="dualkey")},
inverseJoinColumns={
@JoinColumn(name = "conceptid", referencedColumnName="id", insertable = false, updatable = false),
@JoinColumn(name="effectiveTime", referencedColumnName="effectiveTime", insertable = false, updatable = false)})
private Set<Concept> concepts = new HashSet<Concept>();
//getters and setters
}
然后,我在数据库中创建了具有不同表映射的实体的副本,以及我创建的包含子集数据的新表:
@Entity
@Table(name = "conc_finding_dual_key")
public class ConcFindingDualKey {
@Id
@Column(name="dualkey")
private String name;
@ManyToMany(cascade = {CascadeType.ALL})//
@JoinTable(name="conc_finding_dual_key_junction_new",
joinColumns={@JoinColumn(name="dualkey")},
inverseJoinColumns={
@JoinColumn(name = "conceptid", referencedColumnName="id", insertable = false, updatable = false),
@JoinColumn(name="effectiveTime", referencedColumnName="effectiveTime", insertable = false, updatable = false)})
private Set<Concept> concepts = new HashSet<Concept>();
//getters and setters
}
答案 0 :(得分:1)
不要复制表格,而是创建updatable view。
答案 1 :(得分:1)
不要重复使用相同的实体将注释与某些xml映射相结合以指定表。要检索使用您为实体而不是类提供的名称。
<entity-mappings
xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"
version="2.0">
<entity name="ConcDualKey" class="ConcDualKey" table="conc_dual_key" />
<entity name="ConcFindingDualKey " class="ConcDualKey" table="conc_finding_dual_key" />
</entity-mappings>
像这样的东西。您也可以将ConcFindingDualKey
设为只读。
映射进入名为orm.xml
的文件中,该文件应位于项目的META-INF
目录中。 (这是JPA规范中指定的默认位置,您可以将它放在任何位置,但是您必须通过在mapping-file
中包含persistence.xml
元素来明确告诉hibernate在哪里找到该文件。