网站策划预算怎么做,如何通过网站开发客户,重庆制作网站速成班,做网站 对方传销在本教程中#xff0c;我们将看到如何在hibernate中实现继承。有3种方法可以在hibernate中实现继承。在本文中#xff0c;我们将看到其中一种#xff0c;即每个类层次结构一个表。 休眠中的继承#xff1a; Java是面向对象的语言#xff0c;继承是Java的主要功能之一。关… 在本教程中我们将看到如何在hibernate中实现继承。有3种方法可以在hibernate中实现继承。在本文中我们将看到其中一种即每个类层次结构一个表。 休眠中的继承 Java是面向对象的语言继承是Java的主要功能之一。关系模型可以实现“是”和“具有”关系但是休眠为我们提供了以不同方式实现类层次结构的方法。 每个类层次结构一张表 假设我们具有以下类层次结构我们以shape类为基类而Rectangle和Circle继承自Shape类。 在每个类层次结构的一个表中将为以上层次结构创建一个表。即将创建具有以下结构的SHAPE表。 如您所见仅创建了一个具有子类属性的表SHAPE。 根据上面的类图我们将创建三个类-Shape.javaRectangle.java和Circle.java 1.Shape.java 这是我们实体类层次结构的根类。 在SRC- org.arpit.javapostsforlearning创建Shape.java。 package org.arpit.javapostsforlearning;
import javax.persistence.Column;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;
import javax.persistence.DiscriminatorType;Entity
Table(nameSHAPE)
Inheritance(strategyInheritanceType.SINGLE_TABLE)
DiscriminatorColumn
(nameDiscriminator,discriminatorTypeDiscriminatorType.STRING
)
DiscriminatorValue(valueS)
public class Shape {IdGeneratedValueColumn(nameShape_Id)int shapeId;Column(nameShape_Name)String shapeName;public Shape(){} public Shape(String shapeName){this.shapeNameshapeName;}//getters and setters} Shape是我们的根类因此一些注释需要与根类一起使用以实现继承。 遗产 为了在hiberante中实现继承使用Inheritance批注。该批注定义了要为实体类层次结构实现的继承策略。对于每个类层次结构的一个表我们已使用Single_Table作为继承策略。此批注在根级别或子层次结构级别定义适用不同策略的地方。 DiscriminatorColumn 该注释用于定义Single_Table和联接策略的区分符列用于区分不同的类实例。此注释在要应用不同策略的根级别或子层次结构级别定义。 如果未指定DiscriminatorColumn批注则hibernate将创建一个名为“ DType”的列而DiscriminatorType将为字符串。 DiscriminatorValue 这个注解定义了该类在鉴别符列中的值。这只能应用于实体具体类。例如如果条目将是SHAPE表中的形状实例则s将是鉴别符列中该行的值。未指定注释并且使用Discriminator列则将提供提供者特定的值如果Discriminator类型为String则鉴别符值将是实体名称。Discriminator值如果没有默认值则需要在层次结构中的每个实体上指定。 2Rectangle.java 这是我们的孩子班。 在src- org.arpit.javapostsforlearning中创建Rectangle.java 。 package org.arpit.javapostsforlearning;import javax.persistence.Column;
import javax.persistence.Column;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;Entity
DiscriminatorValue(valueR)
public class Rectangle extends Shape{Column(nameRectangle_Length)int length;Column(nameRectangle_Breadth)int breadth;// getters and setterspublic Rectangle(){}public Rectangle(String shapeName,int length,int breadth){super(shapeName);this.lengthlength;this.breadthbreadth;}// getters and setters
}3Circle.java 这是我们的第二个孩子班。 在SRC- org.arpit.javapostsforlearning创建Circle.java。 package org.arpit.javapostsforlearning;import javax.persistence.Column;
import javax.persistence.Column;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;Entity
DiscriminatorValue(valueR)
public class Rectangle extends Shape{Column(nameRectangle_Length)int length;Column(nameRectangle_Breadth)int breadth;// getters and setterspublic Rectangle(){}public Rectangle(String shapeName,int length,int breadth){super(shapeName);this.lengthlength;this.breadthbreadth;}// getters and setters
}4Hiberante.cfg.xml 在src文件夹中创建一个名为“ hibernate.cfg.xml”的文件。 ?xml version1.0 encodingutf-8?
!DOCTYPE hibernate-configuration PUBLIC-//Hibernate/Hibernate Configuration DTD 3.0//ENhttp://hibernate.sourceforge.net/hibernate-configuration-3.0.dtdhibernate-configurationsession-factory!-- Database connection settings --property nameconnection.driver_classcom.microsoft.sqlserver.jdbc.SQLServerDriver/propertyproperty nameconnection.urljdbc:sqlserver://localhost:1433;databaseUserInfo/propertyproperty nameconnection.usernamesa/propertyproperty nameconnection.password/property!-- JDBC connection pool (use the built-in) --property nameconnection.pool_size1/property!-- SQL dialect --property namedialectorg.hibernate.dialect.SQLServer2005Dialect/property!-- Enable Hibernates automatic session context management --property namecurrent_session_context_classthread/property!-- Disable the second-level cache --property namecache.provider_classorg.hibernate.cache.NoCacheProvider/property!-- Echo all executed SQL to stdout --property nameshow_sqltrue/property!-- Drop and re-create the database schema on startup --property namehbm2ddl.autocreate/propertymapping classorg.arpit.javapostsforlearning.Shape/mappingmapping classorg.arpit.javapostsforlearning.Rectangle/mappingmapping classorg.arpit.javapostsforlearning.Circle/mapping/session-factory/hibernate-configuration5主要类别 package org.arpit.javapostsforlearning;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;public class HibernateMain {public static void main(String[] args) {Shape shapenew Shape(Sqaure);Rectangle rectanglenew Rectangle(Rectangle, 10, 20); Circle circlenew Circle(Circle, 4);Configuration configurationnew Configuration();configuration.configure();ServiceRegistry sr new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();SessionFactory sfconfiguration.buildSessionFactory(sr);Session sssf.openSession();ss.beginTransaction();ss.save(shape);ss.save(rectangle);ss.save(circle);ss.getTransaction().commit();ss.close();}
}6运行它 运行它时您将获得以下输出。 Hibernate: create table SHAPE (Discriminator varchar(31) not null, Shape_Id int identity not null, Shape_Name varchar(255), Rectangle_Breadth int, Rectangle_Length int, Circle_Radius int, primary key (Shape_Id))
Feb 04, 2013 11:01:36 PM org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: HHH000230: Schema export complete
Hibernate: insert into SHAPE (Shape_Name, Discriminator) values (?, S)
Hibernate: insert into SHAPE (Shape_Name, Rectangle_Breadth, Rectangle_Length, Discriminator) values (?, ?, ?, R)
Hibernate: insert into SHAPE (Shape_Name, Circle_Radius, Discriminator) values (?, ?, C)7SQL输出 数据库中的SHAPE表。 参考 Hibernate继承我们的JCG合作伙伴 Arpit Mandliya在初学者博客的Java框架和设计模式下的 每个类层次结构表 。 翻译自: https://www.javacodegeeks.com/2013/02/hibernate-inheritance-table-per-class-hierarchy.html