我正在使用Hibernate和Struts2。另外,我在DBForge Studio for MySQL中有我的数据库。
我想要做的是使用来自多个表的信息加载对象(例如" product")。让我们说我已经使用ID来引用密钥。简而言之,如何使用Hibernate创建多个表的视图。
有什么想法吗?
答案 0 :(得分:3)
简而言之,你没有。 AFAIK,无法使用Hibernate或JPA创建数据库视图。
您可以使用简单的投影查询,加入实体:
select a.x, b.y
from A a join B b where a.z = b.z
或使用NEW
运算符将结果映射到DTO:
select new com.acme.MyDto(a.x, b.y)
from A a join B b where a.z = b.z
如果您已有DB视图,则可以将其映射到常规实体类并查询此实体。
答案 1 :(得分:0)
可以通过这些简单的步骤完成。
第1步。
使用您需要的所有变量创建一个类
第2步。
创建一个包含所有变量作为参数的构造函数,如
className(String name,int rollNUmber){
this.name=name;
this.rollNumber=rollNumber;
}
第3步
执行此查询
select new com.path.ClassName(columnName1,columnName2) from tableName where Conditions;
<强> NB 强> 它们从查询中返回的值(列)的类型必须适合构造函数参数。
答案 2 :(得分:0)
JAVA Persistence Api
书中的示例。
@Entity @org.hibernate.annotations.Immutable
@org.hibernate.annotations.Subselect(
value = "select i.ID as ITEMID, i.ITEM_NAME as NAME, " +
"count(b.ID) as NUMBEROFBIDS " +
"from ITEM i left outer join BID b on i.ID = b.ITEM_ID " +
"group by i.ID, i.ITEM_NAME")
@org.hibernate.annotations.Synchronize({"Item", "Bid"})
public class ItemBidSummary {
@Id
protected Long itemId;
protected String name;
protected long numberOfBids;
public ItemBidSummary() { }
// Read methods... // ...
}
ItemBidSummary itemBidSummary = em.find(ItemBidSummary.class, ITEM_ID);
// will produce
// select * from (
// select i.ID as ITEMID, i.ITEM_NAME as NAME, ...
// ) where ITEMID = ?