採用JPA對Hibernate進行註解操作
@Entity:作用:指定當前是實體類,寫上此註解用於在建立SessionFactory時,載入對映配置。
@Table:作用:指定實體類和表之間的關係。屬性:name:指定資料庫表的名稱。
@Id:作用:指定當前欄位是主鍵。
@Column:作用:指定實體類屬性和資料庫表之間的對應關係。
屬性:name:指定資料庫表的列名稱
unique:是否唯一
nullable:是否可以為空
inserttable:是否可以插入
updateable:是否可以更新
columnDefinition:定義建表時建立此列的DDL
secondaryTable:從表名。如果此列不建在主表上(預設建在主表),該屬性定義該列所在從表的名字。
@GenerateValue:作用:指定主鍵的生成方式。
屬性:strategy:指定主鍵生成策略
主鍵的生成策略:
通過annotation(註解)來對映hibernate實體的,基於annotation的hibernate主鍵標識為@Id, 其生成規則由@GeneratedValue設定的.這裡的@id和@GeneratedValue都是JPA的標準用法。JPA提供的四種標準用法為TABLE,SEQUENCE,IDENTITY,AUTO。
table:使用一個特定的資料庫表格來儲存主鍵(瞭解)。
sequence:根據底層資料庫的序列來生成主鍵,條件是資料庫支援序列。
identity:主鍵由資料庫自動生成(
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>();
相關推薦
採用JPA對Hibernate進行註解操作
@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叠代器問題 有100個人圍成一個圈從1開始報數,報到14的這個人就要退出,然後其他人重新開始,從1報數,到14退出問:最後剩下的是100人中的第幾個人 用listIterator叠代元素,並對集合進行刪除操作
arraylist ger new println 集合 arr size 計數 add package com.swift; import java.util.ArrayList; import java.util.List; import java.util.Lis
關於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#利用NPOI對Excel進行基本操作
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或petapoco對sqlite進行資料操作
在mono for android中使用dapper或petapoco,很簡單,新建android 類庫專案,直接把原來的檔案複製過來,對Connection連線報錯部分進行註釋和修改就可以運行了.(用可移植類庫PCL專案也可以的.) 如果需要原始碼可以聯絡我.10元收費哈.. 以下內容包括 1.在安卓中建
js對日期進行格式化操作
JX_data(data) { //日期格式化過濾器 Date.prototype.format = function (fmt) { //author: meizz var o = { 'M+':
POI對Excel進行讀取操作,工具類,便於操作資料
一:首先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"