@注解_subselect

来源:互联网 发布:家用电脑远程监控软件 编辑:程序博客网 时间:2024/05/16 19:50

直接上代码咯

说明:

subselect(可选):它将一个不可变(immutable)并且只读的实体映射到一个数据库的子查询中。当你想用视图代替一张基本表的时候,这是有用的,但最好不要这样做。
若指明的持久化类实际上是一个接口,这也是完全可以接受的。之后你可以用元素 <subclass> 来指定该接口的实际实现类。你可以持久化任何 static(静态的)内部类。你应该使用标准的类名格式来指定类名,比如:Foo$Bar。

package cn.jbit.test2.bean;import java.io.Serializable;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.Id;import javax.persistence.Table;import org.hibernate.annotations.Subselect;import org.hibernate.annotations.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 impactedpublic 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;}}
测试类:

package cn.jbit.test2.test;import java.util.List;import org.hibernate.HibernateException;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.Transaction;import cn.jbit.ch04.util.HibernateUtil;import cn.jbit.test2.bean.Summary;public class SummaryTest {@SuppressWarnings("unchecked")public static void add() {Session session = null;Transaction tx = null;try {session = HibernateUtil.getSession();tx = session.beginTransaction();String hql = "from Summary";Query query = session.createQuery(hql);List<Summary> list = query.list();// System.out.println(list.size());for (Summary summary : list) {System.out.println(summary.getItemName() + "\t"+ summary.getAmountMax() + "\t"+ summary.getItemCount());}tx.commit();} catch (HibernateException e) {if (tx.isActive()) {tx.rollback();}e.printStackTrace();}}public static void main(String[] args) {add();}}

1 0
原创粉丝点击