当我想通过SQL Query创建View for Report时,这是否可行。此视图的某些列是从某些不同表中的另一列计算的。我看到我大学里的朋友没有使用View,他们只是创建了一个新表来存储该报告。他们表示,当数据变大时,它会使应用程序运行得比创建View更快。这是正确的,对我有什么建议吗?是否有可能使用Hibernate从View获得结果?
答案 0 :(得分:0)
关于您的问题:是否可以使用Hibernate从View中获取结果?
是的,您可以使用hibernate来从视图中获取结果。
为什么我们应该使用视图: - 如果在您的应用程序中,您希望向其他人提供报告或数据库视图,而这些人不应该修改您的数据视图创作。
VIEW的性能: - 这取决于您在创建视图时从不同的表中获取的数据量,以及您正在执行的计算。如果您应用更多联接,则会对您的性能进行更多数据计算。
建议: - 如果您拥有大量数据,需要更多表格,并且希望在数据上执行繁琐的逻辑操作,而不是实现非常快速且响应迅速的物化视图。所以这一切都取决于你的申请是什么
答案 1 :(得分:0)
现在关闭我没有完整的分步教程,但是以下的hibernate视图代码将帮助您解决问题
我正在使用HIBERNATE + JPA注释
视图名称: - VIEW_SAMPLE
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity(name = "VIEW_SAMPLE")
public class ComplianceNonComplianceFrontEndView implements Serializable {
private static final long serialVersionUID = -689896943115399462L;
@Id
@Column(name = "COMPANYCODE")
private String companyCode;
@Column(name = "COMPANYNAME")
private String companyName;
@Column(name = "MANAGER_NAME")
private String manager;
public String getCompanyCode() {
return companyCode;
}
public void setCompanyCode(String companyCode) {
this.companyCode = companyCode;
}
public String getCompanyName() {
return companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public String getManager() {
return manager;
}
public void setManager(String manager) {
this.manager = manager;
}
}
Hibernate Code从视图中获取结果
public ComplianceNonComplianceView getCNCViewByCompanyCode(String companyCode) {
String query = null;
ComplianceNonComplianceView cncView = null;
try{
query = " select cncvw from com.crose.rats.bd.transactions.model.ComplianceNonComplianceView cncvw "+
" where "+
" cncvw.companyCode = :clientCode " ;
cncView = (ComplianceNonComplianceView)this.em.createQuery(query).setParameter("clientCode", companyCode).getSingleResult();
}catch(Exception ex){
System.out.println("=============== Exception Occured in : -getCNCViewByCompanyCode() ");
ex.printStackTrace();
}
return cncView;
}
如果您有更多查询,请告诉我们。或者发布您的代码,以便更充分地使用