• Hibernate_10_继承的例子_单表


     只是建一个表,所有属性都包括在此表。使用discriminator 到父和子类之间的区别。

    1)父类(Article):

    public class Article {
    	private Integer id;
    	private String title;
    	private String content;
    	private Date postTime;
    
    	public Integer getId() {
    		return id;
    	}
    
    	public void setId(Integer id) {
    		this.id = id;
    	}
    
    	public String getTitle() {
    		return title;
    	}
    
    	public void setTitle(String title) {
    		this.title = title;
    	}
    
    	public String getContent() {
    		return content;
    	}
    
    	public void setContent(String string) {
    		this.content = string;
    	}
    
    	public Date getPostTime() {
    		return postTime;
    	}
    
    	public void setPostTime(Date postTime) {
    		this.postTime = postTime;
    	}
    
    	@Override
    	public String toString() {
    		return "Article [id=" + id + ", title=" + title + ", content="
    				+ content + ", postTime=" + postTime + "]";
    	}
    
    }

    2)子类(Topic):

    public class Topic extends Article {
    	private Integer type;
    
    	public Integer getType() {
    		return type;
    	}
    
    	public void setType(Integer type) {
    		this.type = type;
    	}
    
    	@Override
    	public String toString() {
    		return "Topic [id=" + getId() + ", title=" + getTitle() + 
     ", content=" + getContent() + ", postTime=" + 
     getPostTime() + ", type=" + type + "]";
    	}
    }

    3)子类(Reply):

    public class Reply extends Article {
    	private Integer floor;
    
    	public Integer getFloor() {
    		return floor;
    	}
    
    	public void setFloor(Integer floor) {
    		this.floor = floor;
    	}
    
    	@Override
    	public String toString() {
    		return "Reply [id=" + getId() + ", title=" + getTitle() + 
     <span style="white-space:pre">		</span>", content=" + getContent() + ", postTime=" + 	 
    <span style="white-space:pre">		</span> getPostTime() + ", floor=" + floor + "]";
    	}
    }

    4)持久化层:

    package extends_1;
    
    import java.sql.Date;
    
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    import org.junit.Test;
    
    public class ExtendsDao {
    
    	/**
    	 * save 方法
    	 */
    	@Test
    	public void testSave() {
    		Session session = SessionFactoryTools.getSession();
    		Transaction tx = null;
    		try {
    			tx = session.beginTransaction();
    
    			// ==========================================
    
    			// 新建对象并设置属性
    			Article article = new Article();
    			article.setTitle("article");
    			article.setContent("你是我的玫瑰!");
    			article.setPostTime(new Date(20140731));
    
    			Topic topic = new Topic();
    			topic.setTitle("topic");
    
    			Reply reply = new Reply();
    			reply.setTitle("reply");
    
    			// 保存对象
    			session.save(article);
    			session.save(topic);
    			session.save(reply);
    
    			// ============================================
    
    			tx.commit();
    		} catch (RuntimeException e) {
    			if (tx != null) {
    				tx.rollback();
    			}
    			throw e;
    		} finally {
    			session.close();
    		}
    	}
    
    	/**
    	 * getById方法
    	 */
    	@Test
    	public void testGetById() {
    		Session session = SessionFactoryTools.getSession();
    		Transaction tx = null;
    		try {
    			tx = session.beginTransaction();
    
    			// ========================================================
    			
    			// 读取数据并输出
    			Article article = (Article) session.get(Article.class, 1);
    			System.out.println(article);
    
    			Article topic = (Article) session.get(Topic.class, 2);
    			System.out.println(topic);
    
    			Article reply = (Article) session.get(Reply.class, 3);
    			System.out.println(reply);
    
    			// ==========================================================
    
    			tx.commit();
    		} catch (RuntimeException e) {
    			if (tx != null) {
    				tx.rollback();
    			}
    			throw e;
    		} finally {
    			session.close();
    		}
    	}
    }
    

    5)Article.hbm.xml文件配置:

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    
    <hibernate-mapping package="extends_1">
    	
    	<!-- 
    		discriminator-value属性:
    		用于鉴别是哪个类的一个值,表示这个值就是这个类。

    假设不写。默觉得类的全限定名。 --> <class name="Article" table="article discriminator-value="Article"> <id name="id"> <generator class="native"/> </id> <!-- 用于鉴别是什么类型的一个类 --> <discriminator type="string" column="class_"> </discriminator> <property name="title"/> <property name="content" type="text" length="10000"/> <property name="postTime" type="timestamp"/> <!-- 子类:Topic --> <subclass name="Topic" discriminator-value="Topic"> <property name="type"></property> </subclass> <!-- 子类:Reply --> <subclass name="Reply" discriminator-value="Reply"> <property name="floor"></property> </subclass> </class> </hibernate-mapping>

    6)主文件配置略。









    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    MySQL(2)---Explain
    MySQL(1)---索引
    php 的 PHPExcel1.8.0 使用教程
    通过html5 的EventSource来进行数据推送
    centos6.6 下 安装 php7 按 nginx方式
    IIS PHP Warning: Unknown: open(c:\php\tmp\sess_xxx, O_RDWR) failed: Permission denied (13) in Unknown on line 0
    动态加载JS,并执行回调函数
    nginx 504 gateway time out
    php 账号不能同时登陆,当其它地方登陆时,当前账号失效
    php 函数中静态变量的问题
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4647772.html
Copyright © 2020-2023  润新知