@Entity
@Entity:映射实体类
@Entity(name="tableName")
name:可选,对应数据库中一个表,若表名与实体类名相同,则可以省略。
注意:使用@Entity时候必须指定实体类的主键属性。
第一步:建立实体类:
分别给类名上面加上@Entity注解。给类中作为主键的属性的get方法前面加上@Id注解。
package Com.Entity;import java.util.Date;import javax.persistence.Entity;/*JPA主键*/import javax.persistence.Id;/*学生实体类*/@Entity(name="Students")public class Students { ???private int sid; ???private String sname;//姓名 ???private String gender;//性别 ???private Date birthday; ???private String major;//专业 ???private String address;//地址 ???????public Students() ???{ ???????????} ???public Students(int sid, String sname, String gender, Date birthday, String major, String address) { ???????//super(); ???????this.sid = sid; ???????this.sname = sname; ???????this.gender = gender; ???????this.birthday = birthday; ???????this.major = major; ???????this.address = address; ???} ?? @Id ???public int getSid() { ???????return sid; ???} ???public void setSid(int sid) { ???????this.sid = sid; ???} ???public String getSname() { ???????return sname; ???} ???public void setSname(String sname) { ???????this.sname = sname; ???} ???public String getGender() { ???????return gender; ???} ???public void setGender(String gender) { ???????this.gender = gender; ???} ???public Date getBirthday() { ???????return birthday; ???} ???public void setBirthday(Date birthday) { ???????this.birthday = birthday; ???} ???public String getMajor() { ???????return major; ???} ???public void setMajor(String major) { ???????this.major = major; ???} ???public String getAddress() { ???????return address; ???} ???public void setAddress(String address) { ???????this.address = address; ???} ???}
第二步:在配置中配置好这个类。
第三步:写测试类:
package Com.Entity;import java.util.EnumSet;import org.hibernate.boot.Metadata;import org.hibernate.boot.MetadataSources;import org.hibernate.boot.registry.StandardServiceRegistryBuilder;import org.hibernate.service.ServiceRegistry;import org.hibernate.tool.hbm2ddl.SchemaExport;import org.hibernate.tool.schema.TargetType;import org.junit.Test;public class TestStudents { ?? @Test ???public void testSchemaExport() ???{ ???????//创建服务注册对象 ???????ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build(); ???????//创建Metadata对象 ???????Metadata metadata =new MetadataSources(serviceRegistry).buildMetadata(); ???????//创建SchemaExport对象 ???????SchemaExport export = new SchemaExport(); ?????????export.create(EnumSet.of(TargetType.DATABASE),metadata); ???}}
调试后,数据库中正常生成表。
@Table
@Table(name="",catalog="",schema="")
@Entity配合使用,只能标注在实体类的class定义处,表示实体对应的数据库表的信息。
name:可选,映射表名称,默认表名和实体名称一致,只有在不一致的情况下需要指定表名。
catalog(目录):可选,表示catalog名称,默认为:catalog("")。
schema(模式):可选,表示schema名称,默认为:schema("")。
Table注解实例:对于之前的Entity修改如下:
name:表名前面,schema:默认为使用的数据库名
@Embeddable
表示一个非Entity类可以嵌入到另一个Entity类中作为属性而存在。
相当于代替之前单笔操作的的组件属性。
第一步:在建一个非entity类,并且在前加上@Embeddable注解。
package Com.Entity;import javax.persistence.Embeddable;@Embeddable/*表示一个嵌入类,在另一个实体类中充当属性*/public class Address { ???private String postCode;//邮编 ???private String address;//地址 ???private String phone; ???public Address() ???{ ???????????} ???public String getPostCode() { ???????return postCode; ???} ???public void setPostCode(String postCode) { ???????this.postCode = postCode; ???} ???public String getAddress() { ???????return address; ???} ???public void setAddress(String address) { ???????this.address = address; ???} ???public String getPhone() { ???????return phone; ???} ???public void setPhone(String phone) { ???????this.phone = phone; ???} ???}
第二步:在entity实体类中加入这个类的对象,并且加上set,get方法。
第三步:测试:
发现按照要求生成成功。
01-hibernate注解:类级别注解,@Entity,@Table,@Embeddable
原文地址:http://www.cnblogs.com/alsf/p/7822241.html