-
一對一單向外鍵關聯(二)
如何向數據庫中保存一對一單向外鍵的數據表
//先生成一個身份證對象-外鍵表
IdCard card = new IdCard("123456789012345678","張敬嶺");
//再生成學生對象-主表,如果Date類型是util中的則插入不了數據,換成sql的就可以了,原因是hibernate和數據庫的不兼容
Students s = new Students(card,"男",new Date(),"太極拳");
//先保存身份證類再保存students
session.save(card);
session.save(s);
查看全部 -
一對一單向外鍵:(寫在主表內)
@oneToOne(cascade=CascadeType.ALL)
cascade:級聯關系
CascadeType.ALL:全級聯關系-----級聯刪除,級聯更新,級聯添加
@JoinColumn(name="pid",unique=true)
name:主表的外鍵,unique:外鍵也是唯一的
注意:先保存外鍵對象,再保存主表對象
順序:
1,編寫Students實體類(必須添加@Entity注解才能在數據庫創(chuàng)建表)
2,編寫IdCard實體類(pid,pname)
? ? ?@Entity設置實體類,? ?
@Id
@GeneratedValue(generator="pid")
@GenericGenerator(name="pid",strategy="assigned")
@Column(length=18)
?設置主鍵
? ? ?設置構造函數,getset等
3,將IdCard類當做Students的屬性,并在此屬性的get方法上設置外鍵主鍵
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="pid",unique=true)
4,配置xml文件,映射類
5,編寫測試文件,SchemaExport生成數據表
查看全部 -
實體間的映射關系:
一對一:一個公民對應一個身份證號碼
一對多(多對一):一個公民有多個銀行賬號
多對多:一個學生有多個老師,一個老師有多個學生
查看全部 -
關系映射級別注解:
1,一對一單向外鍵
2,一對一雙向外鍵關聯
3,一對一單向外鍵聯合主鍵
4,多對一單向外鍵關聯
5,一對多單向外鍵關聯
6,一對多雙向外鍵關聯
7,多對多單向外鍵關聯
8,多對多雙向外鍵關聯
查看全部 -
@Transient:
標識該屬性不是一個到數據庫表的字段的映射,ORM框架可以忽略該屬性
查看全部 -
@EmbeddedId:使用嵌入式主鍵類實現復合主鍵
注意:嵌入式主鍵類必須實現Serializable接口,必須有默認的public無參數的構造方法,必須覆蓋equals和hashCode方法
創(chuàng)建一個類,此類中的字段是其他實體類的復合主鍵:
public class StudentsPK implements Serializable{
?//實現序列化接口后最好設定一個序列化版本號
//序列化版本號是為了反序列化成功而設置的,若是不想被反序列化則可以設置一個動態(tài)的版本號,可以到有道云筆記中查看
?private static final long serialVersionUID=1L;
? private String id;//身份證號碼
? private String sid;//學號
? public StudentsPK(){}
? get/set方法
? equals和tostring方法
}
//測試
首先標識嵌入類和嵌入類id
然后給嵌入類賦值:StudentPK pk=new StudentPK();
pk.setID("123345");pk.setSid("12345");
然后再Students s=new Students(pk,"張三豐","男"。。。。);
最后:session.save(s);tx.commit();
查看全部 -
@embedded是注釋屬性的,表示該屬性的類是嵌入類
注意:同時嵌入類也必須標注@Embeddable注解
查看全部 -
@Column注解:描述了數據庫表中該字段的詳細定義
常用屬性:
name:默認屬性和字段名一致,不一致則用此屬性設置
nullable:表示該字段是否允許為null,默認為true
unique:表示該字段是否是唯一標識,默認為false
length:標識該字段的大小,僅對string類型的字段有效,默認255
insertable:表示在ORM框架執(zhí)行插入操作時,該字段是否應該出現在INSERT語句中,默認為true
updateable:表示在ORM框架執(zhí)行更新操作時,該字段是否應該出現在UPDATE語句中,默認為true。對于一經創(chuàng)建就不可以更改的字段,該屬性非常有用,比如birthday字段
查看全部 -
1,字符型主鍵使用
? ? ? public void addStudents(){
? ? ? //創(chuàng)建hibernate配置對象
? ? ? ?Configuration config = new Configuration().configure();
? ? ? //創(chuàng)建服務注冊對象
? ? ? ?ServiceRegistry serviceRegistry=new ServiceRegistryBuilder().applySettings(config.getProperties()).buildService.........
? ? ? ?SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
? ? ? //創(chuàng)建會話
? ? ? ?Session session = sessionFactory.getCurrentSession();
? ? ? //創(chuàng)建事務
? ? ? ?Transaction tx = session.beginTransaction();
? ? ? //創(chuàng)建一個學生對象
? ? ? ?Address add = new Address("700005","湖北武當山","13641095182");
? ? ? ?Students s = new Students("S0000001","張三豐","男",new Date(),"太極拳",add);
? ? ? ? session.save(s);
? ? ? ? tx.commit();
? ? }
查看全部 -
1,主鍵是整型的,就可以使用自動增長類型,auto(根據底層數據庫自動選擇)
? ? ?@Id
? ? ?@GeneratedValue(strategy=GenerationType.AUTO)//(主鍵策略,默認為auto)
? ? ?private int sid;
2,主鍵是字符串類型,要么不寫上@GeneratedValue,要么就用hibernate的注解而不是JPA的@GeneratedValue形式
? ? ?@Id
? ? ?@GeneratedValue(generator="sid")//先設置一個策略生成器
? ? ?@GenericGenerator(name="sid",strategy="assigned")//字符串主鍵生成策略
? ? ?@Column(length=8)
? ? ?private String sid;
查看全部 -
1,@GeneratedValue(strategy=GenerationType,generator="")
? ? 設置主鍵的生成策略
2,strategy表示主鍵生成策略,取值有:
? ? ?GenerationType.Auto:根據底層數據庫自動選擇(默認)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 必須是整型
? ? ?GenerationType.INDENTITY:根據數據庫的Identity字段生成
? ? ?GenerationType.SEQUENCE:使用sequence來決定主鍵的取值
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?oracle沒有自動增長類型,類似的是序列
? ? ?GenerationType.TABLE:使用指定表來決定主鍵取值
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?結合@TableGenerator使用
? 3,使用:
? ? ? ? ? @Id
? ? ? ? ? @TableGenerator(name="tab_cat_gen",allocationSize=1)
? ? ? ? ? @GeneratedValue(Strategy=GenerationType.Table)
? ? ? ? ? Generator-表示主鍵生成器的名稱,這個屬性通常和ORM框架相關,例如:Hibernate可以指定uuid等主鍵生成方式
查看全部 -
1,@Id:如果有多個屬性定義為主鍵屬性,該實體類必須實現serializable接口(implements Serializable)
2,若是作為主鍵的字段是字符串類型,那么必須設置好字段的長度才行
? ? ?因為如果不設置的話默認長度為255,但是mysql規(guī)定主鍵字段不能過長很明顯255已經超出了限制
? ? ?這時候需要在字段上設置@Column(length=8)
查看全部 -
@Id,@SequenceGenerator,@GeneratedValue,@Column,@Embedded,@EmbeddedId,@Lob,@Version,@Basic,@Transient
查看全部 -
1,@Embeddable:標識一個非Entity類可以嵌入到另一個Entity類中作為屬性而存在----嵌入類
2,@Embeddable標識的類作為一個實體類的屬性存在時,在數據庫的數據表中的表現是,會將嵌入類中的幾個屬性也作為字段
? ? ?比如實體類為student,嵌入類為address,address中有郵編,地址,聯系電話三個字段,那么在數據表中就會存在此三個字段,而不是將address作為一個整體字段
查看全部 -
1,@Table注解 常用屬性:name,catalog,schema
2,shema屬性和catalog屬性,各個數據庫支持不一致
? ? ?oracle: 不支持catalog,schema就是 oracle user ID
? ? ?mysql:不支持catalog,schema就是數據庫名字
? ? ?sqlserver:catalog是數據庫名,不支持schema
? ? ?DB2:不清楚
3,@Table和@Entity配合使用
? ? ? @Entity
? ? ? @Table(name="student")
? ? ? ?public class student{
? ? ? ? }
查看全部
舉報