如何使用Hibernate创建视图?

时间:2014-05-07 02:33:07

标签: hibernate view

我正在使用Hibernate和Struts2。另外,我在DBForge Studio for MySQL中有我的数据库。

我想要做的是使用来自多个表的信息加载对象(例如" product")。让我们说我已经使用ID来引用密钥。简而言之,如何使用Hibernate创建多个表的视图。

有什么想法吗?

3 个答案:

答案 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 = ?