1. 程式人生 > >採用JPA對Hibernate進行註解操作

採用JPA對Hibernate進行註解操作

@Entity:作用:指定當前是實體類,寫上此註解用於在建立SessionFactory時,載入對映配置。

@Table:作用:指定實體類和表之間的關係。屬性:name:指定資料庫表的名稱。

@Id:作用:指定當前欄位是主鍵。

@Column:作用:指定實體類屬性和資料庫表之間的對應關係。

  屬性:name:指定資料庫表的列名稱

unique:是否唯一

nullable:是否可以為空

inserttable:是否可以插入

updateable:是否可以更新

columnDefinition:定義建表時建立此列的DDL

secondaryTable:從表名。如果此列不建在主表上(預設建在主表),該屬性定義該列所在從表的名字。

@GenerateValue:作用:指定主鍵的生成方式。

   屬性:strategy指定主鍵生成策略

主鍵的生成策略:

通過annotation(註解)來對映hibernate實體的,基於annotationhibernate主鍵標識為@Id,  其生成規則由@GeneratedValue設定的.這裡的@id@GeneratedValue都是JPA的標準用法JPA提供的四種標準用法為TABLE,SEQUENCE,IDENTITY,AUTO

table:使用一個特定的資料庫表格來儲存主鍵(瞭解)

sequence:根據底層資料庫的序列來生成主鍵,條件是資料庫支援序列。

identity:主鍵由資料庫自動生成(

mysql可用)。

auto:主鍵有由程式控制。

JPA的多表對映            

一對多關係對映(預設一方放棄外來鍵維護,預設延遲載入)

@OneToMany:作用:建立一對多的關係對映

屬性:targetEntityClass:指定多的多方的類的位元組碼。

  mappedBy:指定從表實體類中引用主表的物件的名稱。

  cascade:指定要使用的級聯操作

  fetch:指定是否採用延遲載入

  orphanRemoval:是否使用孤兒刪除

@ManyToOne:作用:建立多對一關係

  屬性:targetEntityClass:指定一的一方實體類位元組碼

cascode:指定要使用的級聯操作

fetch:指定是否採用延遲載入

optional:關聯是否可選。如果設定為false,則必須始終存在非空關係。

@JoinColumn:作用:用於定義主鍵欄位和外來鍵欄位的對應關係。

  屬性:name:指定外來鍵欄位的名稱

referenceColumnName:指定引用主表的主鍵欄位民稱

unique:是否唯一,預設不唯一

nullable:是否允許為空,預設值允許

insertable:是否允許插入,預設值允許

updatable:是否允許更新,預設值允許

columnDefinition:列的定義資訊

一對多舉例(客戶和聯絡人為例):

客戶實體類(主表,一方的表):

@Entity
//設定表名為
@Table(name="customer")
public class Customer implements Serializable {
	//配置ID
	@Id
	//表中的主鍵
	@Column(name="cid")
	//配置主鍵生成策略
	@GenericGenerator(name="ontomany",strategy="native")
	@GeneratedValue(generator="ontomany")
	private Integer cid;
	@Column(name="cname")
	private String cname;
	@Column(name="csex")
	private String csex;
	//targetEntity指定多的一方的類的位元組碼物件,mappedBy指定從表實體類中引用主表的物件的名稱
	/*@OneToMany(targetEntity=LinkMan.class,mappedBy="customer",
	 * cascade={CascadeType.PERSIST,CascadeType.MERGE})*/
	//注意:多對多中不能配All,可能會刪除全部資訊
	@OneToMany(targetEntity=LinkMan.class,mappedBy="customer",cascade=CascadeType.ALL)
	private Set<LinkMan> linkmans = new HashSet<LinkMan>();
	//下面的set/get方法就不寫了

聯絡人實體類(從表,多方的表):

//宣告為實體
@Entity
//建立表的名稱
@Table(name="linkman")
public class LinkMan implements Serializable{
	//配置ID
	@Id
	//配置表中的主鍵的值
	@Column(name="lid")
	//配置主鍵生成策略
	@GenericGenerator(name="manytoone",strategy="native")
	@GeneratedValue(generator="manytoone")
	private Integer lid;
	@Column(name="lname")
	private String lname;
	@Column(name="lsex")
	private String lsex;
	@ManyToOne(targetEntity=Customer.class)
	/* name屬性外來鍵的名稱,referencedColumnName:對映的主表的主鍵的名稱(是欄位的名稱,不是JavaBean的屬性)
	 */
	@JoinColumn(name="cid",referencedColumnName="cid")
	private Customer customer;

多對多關係的對映(不操作的一方放棄外來鍵維護,預設延遲載入)

@ManyToMany:作用:用於對映多對多的關係

屬性:cascode:配置級聯操作。

  fetch:配置是否採用延遲載入

  targetEntity:配置目標的實體類,對映多對多的時候不用寫

mappedBy:指定另一個多方實體類中引用該表的物件的名稱。

@JoinTable:作用:針對中間表的配置

屬性:name:配置中間表的名稱

  joinColumns:中間表的外來鍵欄位關聯當前實體類所對應表的主鍵欄位

  inverseJoinColumn:中間表的外來鍵欄位關聯對方表的主鍵欄位

@JoinColumn:作用:用於定於主鍵欄位和外來鍵欄位的對應關係。

  屬性:name:指定外來鍵欄位的名稱。

referencedColumnName:指定引用主表的主鍵欄位的名稱

unique:是否唯一,預設值不唯一

nullable:是否允許為空,預設值允許

inserttable:是否允許插入,預設值允許

updatable:是否允許更新,預設允許

columnDefinition:列的定義資訊

多對多舉例(使用者和角色為例):

使用者實體類:

//配置Entity指定實體
@Entity
@Table(name="user")
public class User implements Serializable{
	//配置主鍵生成策略
	@Id
	@Column(name="uid")
	@GenericGenerator(name="umanytomany",strategy="native")
	@GeneratedValue(generator="umanytomany")
	private Integer uid;
	@Column(name="uname")
	private String uname;
	@Column(name="usex")
	private String usex;
	@ManyToMany(targetEntity=Role.class,cascade={CascadeType.PERSIST,CascadeType.MERGE})
	//name中間表的名稱,joinColumns和使用者做主外來鍵關聯,inverseJoinColumns和角色做主外來鍵關聯
	@JoinTable(name="user_role",joinColumns={@JoinColumn(name="uid",referencedColumnName="uid")},inverseJoinColumns={@JoinColumn(name="rid",referencedColumnName="rid")})
	private Set<Role> roles = new HashSet<Role>();

角色實體類:

@Entity
@Table(name="role")
public class Role implements Serializable{
	@Id
	@Column(name="rid")
	@GenericGenerator(name="rmanytomany",strategy="native")
	@GeneratedValue(generator="rmanytomany")
	private Integer rid;
	@Column(name="rname")
	private String rname;
	@Column(name="rsex")
	private String rsex;
	//放棄外來鍵的維護mappedBy="roles",讓直接找User類中的roles去設定外來鍵
	@ManyToMany(targetEntity=User.class,mappedBy="roles")
	private Set<User> users = new HashSet<User>();



相關推薦

採用JPAHibernate進行註解操作

@Entity:作用:指定當前是實體類,寫上此註解用於在建立SessionFactory時,載入對映配置。 @Table:作用:指定實體類和表之間的關係。屬性:name:指定資料庫表的名稱。 @Id:作用:指定當前欄位是主鍵。 @Column:作用:指定實體類屬性和資料庫表之間的對應關係。   屬性:nam

hibernate資料庫進行CRUD操作

package com.hibernate.test; import java.util.List; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibern

關於java中需要路徑進行分割操作時出現的異常

在工作中操作分割路徑時出現的問題 示例:String path = "C:\\Users\\Administrator.SC-201606041031\\Desktop\\test.txt"; 需要對該path進行分割操作則需要 String[] matchPaths = path.split

vue專案中傳送請求獲取到的資料渲染到介面之後無法進行DOM操作的問題

vue.js通常鼓勵開發人員沿著“資料驅動”的方式思考,避免直接接觸DOM。this.$nextTick()將回調延遲到下次DOM更新迴圈之後執行。在修改資料之後立即使用它,然後等待DOM更新。它跟全域性方法vue.nextTick一樣,不同的是回撥的this自動繫結到呼叫它的例項上。 &nbs

資料庫進行插入操作

提交.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head&

javaweb:JDBC連線MYSQL資料庫詳解,使用JDBC資料庫進行CRUD操作以及DAO模式的介紹

  JDBC簡介: JDBC全稱為:Java DataBase Connectivity(java資料庫連線)。 SUN公司為了簡化、統一對資料庫的操作,定義了一套Java操作資料庫的規範,稱之為JDBC。 組成JDBC的2個包: 連結:https://pan

C#中無法access進行Update操作

為何64位的.NET程式不能申請超過2G的空間c#winform文字框字元延時隱藏為何64位的.NET程式不能申請超過2G的空間c#winform文字框字元延時隱藏 C#如何解決修改登錄檔受限問題關於用C#解析Excel的疑問C#如何解決修改登錄檔受限問題關於用C#解析Exc

C#利用NPOIExcel進行基本操作

C#利用NPOI操作Excel詳解 一、 下載npoi控制元件,並進行引用。 1.下載地址: 2.引用npoi (1)、下載後的npoi包括5個dll檔案: (2)、下載完成之後首先建立一個控制檯程式,然後在視圖裡面,調出解決方案資源管理器,點選“引用”>

【pyTorch】torch下的網路如何文字進行embedding操作

torch下的網路對文字進行embedding操作的程式碼示例如下: from torch import nn import torch from torch.nn import functional as F class TextNet(nn.Module):

通過Curl url進行encode操作

最近做專案的時候,通過 Gflags Reload 時候 發現對於某些value中包含=%中文等字元的支援不夠好,value被截斷了。 經過分析後,發現程式對url切分是用=&為標準的,如果value中帶有這樣的特殊字元,必然導致截斷。 解決的方法也很簡單,框架預設對value進行進行了urlde

mono for android中使用dapper或petapocosqlite進行資料操作

在mono for android中使用dapper或petapoco,很簡單,新建android 類庫專案,直接把原來的檔案複製過來,對Connection連線報錯部分進行註釋和修改就可以運行了.(用可移植類庫PCL專案也可以的.) 如果需要原始碼可以聯絡我.10元收費哈.. 以下內容包括 1.在安卓中建

js日期進行格式化操作

    JX_data(data) { //日期格式化過濾器 Date.prototype.format = function (fmt) { //author: meizz var o = { 'M+':

POIExcel進行讀取操作,工具類,便於操作資料

一:首先POI對Excel 操作進行了一系列的封裝,匯入,匯出Excel這裡藉助於POI提供的jar包 專案當中匯入POI提供的Jar包,這裡使用Maven管理   進行匯入jar包   <!-- https://mvnrepository.c

字串進行壓縮操作

a = 'abbccccddcccc' list1 = list(a) stra ="" flag = 0 q = 0 while 1:     if flag == len(a):         break     for i in range(flag,

OpenCV影象進行mask操作

這裡的mask操作指的是,對一幅影象image,有一個binary的mask影象,image_masked = image & mask 可以採用 Mat的copyTo成員函式,利用mask引數實現。 #include <opencv2/core/core.h

Struts2 攔截器中實現資料進行資料庫操作

功能需求說明:         用攔截器的方式,攔截以.action結尾的類,同時記錄訪問的action名稱、action的包路徑、action後面帶的引數、操作者的ID、操作者的姓名、等其他資料。 吐槽點: 1.

MFC中利用ADO資料庫進行簡單操作的例項

目標:實現對資料庫中的資料進行簡單地操作,包括增、刪、改、查。 第一步,建立一個基於對話方塊的應用程式,命名為TestAdo 第二步,按照圖1的介面佈局新增控制元件 圖1 程式介面示意圖 第三步,程式碼實現      首先,要用#import語句來引用支援ADO的

Android EditText進行攔截操作

輸入修改姓名時候,只能輸入漢字,字母,數字,並且最長只能輸入16個字元,數字字母算一個字元,漢字算兩個字元 重寫EditText對單次輸入的內容進行攔截判斷 public class LimitEditText extends EditText {

mybatis(3)---使用mybatis進行CRUD操作

前一節介紹過如何使用mybatis查詢資料庫表t_user中的資料,本節介紹如何使用mybatis對資料庫表t_user進行crud操作 步驟如下: 1、UserMapper.xml檔案內容如下:<?xml version="1.0" encoding="UTF-8"