hibernate屬性級別注解實例代碼
屬性級別注解
添加方式:
寫在屬性字段上面
寫在屬性的get訪問器的上面
@Id
必須,定義了映射到數(shù)據(jù)庫表的主鍵的屬性,一個實體類可以有一個或者多個屬性被映射為主鍵,可置于主鍵屬性或者getXxx()前,注意:如果有多個屬性定義為主鍵屬性,該實體類必須實現(xiàn)serializable接口
@SequenceGenerator
@GeneratedValue
@GeneratedValue(strategy=GenerationType,generator=""):可選,用于定義主鍵生成策略
strategy表示主鍵生成策略,取值有:
GenerationType.AUTO:根據(jù)底層數(shù)據(jù)庫自動選擇(默認)
GenerationType.INDENTITY:根據(jù)數(shù)據(jù)庫的Identity字段生成
GenerationType.SEQUENCE:使用Sequence來決定主鍵的取值
GenerationType.TABLE:使用指定表來決定主鍵取值,結(jié)合@TableGenerator使用
@Column
@Column-可將屬性映射到列,使用該注解來覆蓋默認值,@Column描述了數(shù)據(jù)庫表中該字段的詳細定義,這對于根據(jù)JPA
注解生成數(shù)據(jù)庫表結(jié)構(gòu)的工具非常有作用。
常用屬性:
name:可選,表示數(shù)據(jù)庫表中該字段的名稱,默認情形屬性名稱一致
nullable:可選,表示該字段是否允許為null,默認為true
unique:可選,表示該字段是否為唯一標識,默認為false
length:可選,表示該字段的大小,僅對String類型的字段有效,默認值225,主鍵不能使用默認值
insertable:可選,表示在ORM框架執(zhí)行插入操作時,該字段是否應出現(xiàn)INSERTRT語句中,默認為true
updateable:可選,表示在ORM框架執(zhí)行更新操作時,該字段是否應該出現(xiàn)在UPDATE語句中,默認為true。對于已經(jīng)創(chuàng)建
就不可以更改的字段,該屬性非常有用
@Embedded
@Embedded是注釋屬性的,表示該屬性的類是嵌入類。
注意:同時嵌入類也必須標注@Embeddable注解
@EmbeddedId
@EmbeddedId使用嵌入式主鍵類實現(xiàn)復合主鍵
注意:嵌入式主鍵類必須實現(xiàn)Serializable接口、必須有默認的public無參數(shù)的構(gòu)造方法、必須覆蓋equals和hashCode方法
@Lob
@Version
@Basic
@Transient
可選,表示該屬性并非一個到數(shù)據(jù)庫表的字段的映射,ORM框架將忽略該屬性,如果一個屬性并非數(shù)據(jù)庫表的字段映射,就
務(wù)必將其標示為@Transient,否則ORM框架默認其注解為@Basic
實例:
hibernate.properties配置:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!--
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///hibernate_struts_stumanager</property>
-->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mypage</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.show_sql">false</property>
<property name="hibernate.hbm2ddl.auto">create</property>
<!-- <property name="hibernate_current_session_context_class">thread</property> -->
<property name="current_session_context_class">thread</property>
<mapping class="com.entity.Students"/>
</session-factory>
</hibernate-configuration>
實體類Student:
package com.entity;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;//JPA注解
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import org.hibernate.annotations.GenericGenerator;
/*
* 學生實體類
*/
//@Entity//
//@Entity(name="t_students")//如果不添加名字,則默認與實體類名字相同,如果想要自行設(shè)置表明,就需要自己進行添加
@Entity
@Table(name="t_students1",schema="mypage")
public class Students implements Serializable{
@Id
// @GeneratedValue
// @GeneratedValue(strategy=GenerationType.AUTO)//與@GeneratedValue結(jié)果相同,字符串類型不能指定為AUTO類型
// private int sid; //學號
// @GeneratedValue(generator="sid")
// @GenericGenerator(name="sid",strategy="assigned")
// @Column(length=11)
// private String sid;
@EmbeddedId
private StudentPK pk;
// @Id
//
// @Column(length=11)
private String sname;//姓名
private String gender;//性別
private Date birthday;//出生日期
private String major;//專業(yè)
private Address add;
@Transient //表示該字段不會被ORM映射到表里的字段
private double salary;//薪水
public Students(){
}
public Students(StudentPK pk, String sname, String gender,
Date date, String major,Address add,double salary) {
// super();
this.pk = pk;
this.sname = sname;
this.gender = gender;
this.birthday = date;
this.major = major;
this.add = add;
this.salary = salary;
}
public StudentPK getPk() {
return pk;
}
public void setPk(StudentPK pk) {
this.pk = pk;
}
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 Address getAdd() {
return add;
}
public void setAdd(Address add) {
this.add = add;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
StudentPK實體類:
package com.entity;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Embeddable;
@Embeddable
public class StudentPK implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
@Column(length=18)
private String id;//身份證號
@Column(length=8)
private String sid;//學號
public StudentPK(){
}
public StudentPK(String id, String sid) {
this.id = id;
this.sid = sid;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
return super.equals(obj);
}
@Override
public int hashCode() {
// TODO Auto-generated method stub
return super.hashCode();
}
}
地址類:
package com.entity;
import javax.persistence.Embeddable;
import javax.persistence.Embedded;
// 地址類
@Embeddable //表示是一個嵌入類,這個類的對象在另一個實體類中充當屬性
public class Address {
private String postCode;//郵編
private String address;//地址
private String phone;//聯(lián)系電話
public Address(){
}
public Address(String postCode, String address, String phone) {
this.postCode = postCode;
this.address = address;
this.phone = phone;
}
public String getPostCode() {
return postCode;
}
public void setPostCode(String postCode) {
this.postCode = postCode;
}
@Embedded
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;
}
}
測試類:
package com.entity;
import java.util.Date;
import java.util.EnumSet;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.Test;
public class TestStudents {
@Test
public void testShemaExport(){
//創(chuàng)建hibernate配置對象
Configuration config = new Configuration().configure();
//創(chuàng)建服務(wù)注冊對象
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
//生成SessionFactory
SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
SchemaExport export = new SchemaExport(config);
export.create(true,true);
}
@Test
public void addStudents(){
//創(chuàng)建hibernate配置對象
Configuration config = new Configuration().configure();
//創(chuàng)建服務(wù)注冊對象
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
//生成SessionFactory
SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
//創(chuàng)建會話
Session session = sessionFactory.getCurrentSession();
//創(chuàng)建事務(wù)
Transaction tx = session.beginTransaction();
Address add = new Address("700005","河南理工大學","15039117115");
StudentPK pk = new StudentPK("012345678912345678","55555555");
Students s = new Students(pk,"張三豐","男",new Date(),"太極拳",add,7899);
session.save(s);
tx.commit();
// SchemaExport export = new SchemaExport(config);
// export.create(true,true);
}
}
總結(jié)
以上就是本文關(guān)于hibernate屬性級別注解實例代碼的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:Hibernate核心思想與接口簡介、Hibernate實現(xiàn)悲觀鎖和樂觀鎖代碼介紹、快速了解hibernate配置文件與映射文件等。正所謂書中自有顏如玉,下面附幾本不錯的書籍,供大家學習參考,在此也非常希望大家對本站多多支持。
一鍵下載,免費的哦:
hibernate官方入門教程 中文PDF版
http://www.dbjr.com.cn/books/496598.html
Java設(shè)計模式深入研究 PDF
http://www.dbjr.com.cn/books/581548.html
數(shù)據(jù)挖掘:實用機器學習技術(shù)及Java實現(xiàn)(英文第2版)高清PDF
相關(guān)文章
SpringBoot+thymeleaf+ajax實現(xiàn)局部刷新詳情
這篇文章主要介紹了SpringBoot+thymeleaf+ajax實現(xiàn)局部刷新詳情,文章圍繞主題展開詳細的內(nèi)容介紹具有一定的參考價值,需要的小伙伴可以參考一下2022-09-09
Java實現(xiàn)優(yōu)雅停止線程的有效方法詳解
這篇文章主要為大家詳細如何安全有效停止 Java 線程的,確保多線程應用程序平穩(wěn)運行并實現(xiàn)最佳資源管理,感興趣的小伙伴可以跟隨小編一起學習一下2023-12-12
springboot統(tǒng)一異常處理(返回json)并格式化異常
這篇文章主要介紹了springboot統(tǒng)一異常處理(返回json)并格式化異常,對spring boot的默認異常處理方式進行修改,要統(tǒng)一返回數(shù)據(jù)格式,優(yōu)雅的數(shù)據(jù)交互,優(yōu)雅的開發(fā)應用,需要的朋友可以參考下2023-07-07

