hibernate映射视图的两种方式

1.数据库已经建立视图,hibernate只是把视图当作普通的表来映射。 
视图VIEW_MER_INST_POS: 

select MER.DAYS_MERCHT_ID MER_ID, 
       INST.DAYS_MERCHT_ID INST_ID, 
       POS.POS_ID POS_ID 
from tbl_days_mercht_attr MER, 
     tbl_days_mercht_info INST, 
     tbl_days_mercht_pos_info POS 
where MER.days_mercht_id = INST.up_days_mercht_id 
  and INST.days_mercht_id = POS.days_mercht_id 

hbm.xml配置 

<class 
    name="db.po.ViewMerInstPos" 
    table="VIEW_MER_INST_POS" 
> 

    <composite-id> 
            <key-property 
            name="merId" 
            column="MER_ID" 
            type="java.lang.String" 
            length="8" 
        /> 
        <key-property 
            name="instId" 
            column="INST_ID" 
            type="java.lang.String" 
            length="8" 
        /> 
        <key-property 
            name="posId" 
            column="POS_ID" 
            type="java.lang.String" 
            length="8" 
        /> 
  </class> 
</hibernate-mapping> 

 

2.数据库没有视图,用hibernate自己做视图映射 
hbm配置如下: 

<hibernate-mapping package="huntersxp.db.pojo"> 
<class name="ViewMerInstPos"> 
<meta attribute="sync-DAO">false</meta> 
<subselect> 
select 
MER.DAYS_MERCHT_ID MER_ID,INST.SHOP_NM SHOP_NM,POS.POS_ID POS_ID 
from tbl_days_mercht_attr MER, 
tbl_days_mercht_info INST, 
tbl_days_mercht_pos_info POS 
where MER.days_mercht_id = INST.up_days_mercht_id and INST.days_mercht_id = POS.days_mercht_id 
</subselect> 
<synchronize table="tbl_days_mercht_attr"/> 
<synchronize table="tbl_days_mercht_info"/> 
<synchronize table="tbl_days_mercht_pos_info"/> 
<composite-id> 
        <key-property 
            name="merId" 
            column="MER_ID" 
            type="java.lang.String" 
            length="8" 
        /> 
        <key-property 
            name="shopNm" 
            column="SHOP_NM" 
            type="java.lang.String" 
            length="40" 
        /> 
        <key-property 
            name="posId" 
            column="POS_ID" 
            type="java.lang.String" 
            length="40" 
        /> 
</composite-id> 
</class> 
</hibernate-mapping> 

 
其中synchronize表示当表的数据发生变化的时候,视图的数据也会发生变化。 

 @Entity
  @Table(name = "test_summary")
  @Subselect("SELECT i.name AS itemName, MAX(b.amount) AS amountMax, COUNT(*) AS itemCount "
  + "FROM test_item i "
  + "INNER JOIN test_bid b ON i.item_id = b.id "
  + "GROUP BY i.name")
  @Synchronize( { "test_item", "test_bid" })
  // tables impacted
  public class Summary implements Serializable {
  private static final long serialVersionUID = 3647575276389635849L;
  @Id
  @Column(name = "itemName")
  private String itemName;
  @Column(name = "amountMax")
  private double amountMax;
  @Column(name = "itemCount")
  private Integer itemCount;
  public Summary() {
  super();
  }
  public Summary(String itemName, double amountMax, Integer itemCount) {
  super();
  this.itemName = itemName;
  this.amountMax = amountMax;
  this.itemCount = itemCount;
  }
  public String getItemName() {
  return itemName;
  }
  public void setItemName(String itemName) {
  this.itemName = itemName;
  }
  public double getAmountMax() {
  return amountMax;
  }
  public void setAmountMax(double amountMax) {
  this.amountMax = amountMax;
  }
  public Integer getItemCount() {
  return itemCount;
  }
  public void setItemCount(Integer itemCount) {
  this.itemCount = itemCount;
  }
  }

 

猜你喜欢

转载自gcc2ge.iteye.com/blog/2244733