1. 程式人生 > >JPA 和hibernate-jpa-api

JPA 和hibernate-jpa-api

package com.oa.file.form;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.TableGenerator;

import com.oa.user.form.UserInfo;

@Entity
@Table(name="file_cabinets")
public class FileCabinets {
    
    @Id
    @GeneratedValue(strategy= GenerationType.TABLE,generator="ud")
    @TableGenerator(name = "ud", table = "hibernate_table", pkColumnName = "gen_pk", pkColumnValue = "1", valueColumnName = "gen_val", initialValue = 1, allocationSize = 1)
    @Column(name = "fileId")
    private int fileId;
    @Id
    @ManyToOne(fetch = FetchType.LAZY, cascade = { CascadeType.ALL })
    @JoinColumn(name = "userId", referencedColumnName = "USER_ID")
    private UserInfo userInfo;
    @Column(name = "fullName")
    private String fullName;
    @Column(name = "extensionName")
    private String extensionName;
    @Column(name = "file_size")
    private int fileSize;
    @Column(name = "file_path")
    private String filePath;
    @ManyToOne(fetch = FetchType.LAZY, cascade = { CascadeType.ALL })
    @JoinColumn(name = "file_type")
    private  FileCabinetsType fileCabinetsType;
    public int getFileId() {
        return fileId;
    }
    public void setFileId(int fileId) {
        this.fileId = fileId;
    }
    public UserInfo getUserInfo() {
        return userInfo;
    }
    public void setUserInfo(UserInfo userInfo) {
        this.userInfo = userInfo;
    }
    public String getFullName() {
        return fullName;
    }
    public void setFullName(String fullName) {
        this.fullName = fullName;
    }
    public String getExtensionName() {
        return extensionName;
    }
    public void setExtensionName(String extensionName) {
        this.extensionName = extensionName;
    }
    public int getFileSize() {
        return fileSize;
    }
    public void setFileSize(int fileSize) {
        this.fileSize = fileSize;
    }
    public String getFilePath() {
        return filePath;
    }
    public void setFilePath(String filePath) {
        this.filePath = filePath;
    }
    public FileCabinetsType getFileCabinetsType() {
        return fileCabinetsType;
    }
    public void setFileCabinetsType(FileCabinetsType fileCabinetsType) {
        this.fileCabinetsType = fileCabinetsType;
    }
    
    
}


要點:Table(name="name") 這句話可以不寫,不寫就是類名作為表名
2、如果讓兩個類的屬性生成一個數據表,在這個類裡可以加入@Embedded
3如果想一個類繼承另一個類的所有屬性
@MappedSupperCclass 並把父類的所有屬性從private改為protected


1. @Id 宣告屬性為主鍵
2. @GeneratedValue表示主鍵是自動生成策略,一般該註釋和 @Id 一起使用
3. @Entity 任何 hibernte 對映物件都要有次註釋
4. @Table(name = “tablename”) 類宣告此物件對映到哪個表
5. @Column(name = “Name”,nullable=false,length=32) 宣告資料 庫欄位和類屬性對應關係
6. @Lob 宣告欄位為 Clob 或 Blob 型別
7. @OneToMany(mappedBy=”order”,cascade = CascadeType.ALL, fetch = FetchType.LAZY)
   @OrderBy(value = “id ASC”)
   一對多宣告,和 ORM 產品宣告類似,一看就明白了。
   @ManyToOne(cascade=CascadeType.REFRESH,optional=false)
   @JoinColumn(name = “order_id”)
   宣告為雙向關聯

8. @Temporal(value=TemporalType.DATE) 做日期型別轉換。
9. @OneToOne(optional= true,cascade = CascadeType.ALL, mappedBy = “person”)
   一對一關聯宣告
   @OneToOne(optional = false, cascade = CascadeType.REFRESH)
   @JoinColumn(name = “Person_ID”, referencedColumnName = “personid”,unique = true)
   宣告為雙向關聯
10. @ManyToMany(mappedBy= “students”)
   多對多關聯宣告。
  @ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
  @JoinTable(name = “Teacher_Student”,
    joinColumns = {@JoinColumn(name = “Teacher_ID”, referencedColumnName = “teacherid”)},
    inverseJoinColumns = {@JoinColumn(name = “Student_ID”, referencedColumnName =
    “studentid”)})
   多對多關聯一般都有個關聯表,是這樣宣告的!
11. @Transiten表示此屬性與表沒有對映關係,是一個暫時的屬性
12. @Cache(usage= CacheConcurrencyStrategy.READ_WRITE)表示此物件應用快取

JPA規範

@Entity:通過@Entity註解將一個類宣告為一個實體bean
@Table:通過 @Table註解可以為實體bean對映指定表,name屬性表示實體所對應表的名稱,如果沒有定義 @Table,那麼系統自動使用預設值:實體的類名(不帶包名)
@Id:用於標記屬性的主鍵
@Column:表示持久化屬性所對映表中的欄位,如果屬性名與表中的欄位名相同,則可以省略@Column註解,另外有兩種方式標記,一是放在屬性前,另一種是放在getter方法前,例如:
@Column(name = "EMPLOYEE_NAME")
private String employee_name; 或者
@Column(name = "EMPLOYEE_NAME")
public String getEmployee_name() {
return employee_name;
} 這兩種方式都是正解的,根據個人喜好來選擇。大象偏向於第二種,並且喜歡將屬性名與欄位名設成一樣的,這樣可以省掉@Column註解,使程式碼更簡潔。
@Temporal(TemporalType.DATE):如果屬性是時間型別,因為資料表對時間型別有更嚴格的劃分,所以必須指定具體時間型別,如④所示。在javax.persistence.TemporalType列舉中定義了3種時間型別:
通過 @Temporal 定義對映到資料庫的時間精度:
@Temporal(TemporalType.DATE)       日期
@Temporal(TemporalType.TIME)       時間
@Temporal(TemporalType.TIMESTAMP) 兩者兼具                
@Temporal只是起對映作為
@Transient  
@Target({METHOD, FIELD}) @Retention(RUNTIME)
public @interface Transient {}
指明一個屬性或方法不能持久化
@TableGenerator:表生成器,將當前主鍵的值單獨儲存到一個數據庫表中,主鍵的值每次都是從指定的表中查詢來獲得,這種生成主鍵的方式是很常用的。這種方法生成主鍵的策略可以適用於任何資料庫,不必擔心不同資料庫不相容造成的問題。大象推薦這種方式管理主鍵,很方便,集中式管理表的主鍵,而且更換資料庫不會造成很大的問題。各屬性含義如下:
        name:表示該表主鍵生成策略的名稱,這個名字可以自定義,它被引用在@GeneratedValue中設定的"generator"值中
        table:表示表生成策略所持久化的表名,說簡單點就是一個管理其它表主鍵的表,本例中,這個表名為GENERATOR_TABLE
        pkColumnName:表生成器中的列名,用來存放其它表的主鍵鍵名,這個列名是與表中的欄位對應的
        pkColumnValue:實體表所對應到生成器表中的主鍵名,這個鍵名是可以自定義滴
        valueColumnName:表生成器中的列名,實體表主鍵的下一個值,假設EMPLOYEE表中的EMPLOYEE_ID最大為2,那麼此時,生成器表中與實體表主鍵對應的鍵名值則為3
        allocationSize:表示每次主鍵值增加的大小,例如設定成1,則表示每次建立新記錄後自動加1,預設為50


相關推薦

JPA hibernate-jpa-api

package com.oa.file.form; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.

springboot2.0.3使用jpahibernate的方式配置多數據源(sqlitemysql)

自動 username urn ini sqli tps www 不同的 sqlite數據庫 application.properties配置: #數據庫配置 mysql.spring.datasource.jdbc-url =jdbc:mysql://127.0.0.1

JPAHibernate關係之淺談

首先我們來看一下百度百科關於JPA的解釋,JPA全稱Java Persistence API。JPA通過JDK 5.0註解或XML描述物件-關係表的對映關係,並將執行期的實體物件持久化到資料庫中。JPA的總體思想和現有Hibernate、TopLink、JDO等ORM框架大

JPAHibernate到底是什麼關係???

(文章借用了其他幾篇部落格中的內容,因為是初學者,許多概念性的關係自己不能完全理解,就將大神的搬了過來,如有不當,可留言,本人自會妥善處理,謝謝) 在學習框架的過程中,發現學的東西很多,但是感覺他們之間的聯絡區別都不是很瞭解,知道JPA可以去實現持久化資料到資料庫當中,Hi

Spring Data JPA Vs Hibernate JPA Vs JPA

2017年 html block lin sel ESS api 使用 部分 前言 從文章的標題,就可以清晰地了解到,本文是來辨析三個容易將新手弄糊塗的技術名詞。如果,你一眼看過去就知道這三個名詞的區別及關系,那麽,這篇文章你可以不用繼續讀下去了;除非,你是想要看看我有什麽

springboot jpahibernatemysql對應欄位如何處理

    背景:程式中的entity物件中欄位expression為json字串欄位,每次前端傳過來的json物件進行轉換會時出現錯誤,由於expression被轉換為了JsonObject型別導致。

基於註解的Hibernate JPA操作CRUD(單表、一對多多對多)

0.maven引入相關依賴資源 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/200

Hibernate JPA 根據Java類獲取對應資料庫的表名欄位名稱

專案中使用 Hibernate JPA, 需求是根據 Entity的java 類,來獲取所有的對應的資料庫欄位。 直接上程式碼。 使用者類,對應資料庫的user表 import org.hibernate.validator.constraints.NotBlank;

JPAHibernateMybatis區別總結

一、應用場合: 傳統公司、部分個人開發者喜歡用jpa;而網際網路公司更青睞於mybatis 原因: 1、mybatis更加靈活,開發迭代模式決定了他是網際網路公司的首先;每一次的修改不會帶來效能上的下降。 2、傳統公司需求迭代速度慢、專案改動小,hibernate可以

Springmaven整合mvc,jpa,mongodb,Hibernate

小弟前一段時間在玩弄著Spring,後來發現Spring的那些專案是個好東西啊,特別是Spring的Data那一塊,使用起來是那麼水到渠成,不管底層資料庫是結構化的還是非結構化的(MongoDB,neo4j),用起來沒什麼區別。 所以,自己手動從頭到尾搭建了一個Spring

Hibernate版本 支援 hibernate-jpa-2.0-api-1.0.0.Final.jar

我記得hibernate3.5以前的版本使用註解使用hibernate-annotations.jar以及ejb-persistence.jar。其實這裡的ejb-persistence.jar和前面提到的hibernate-jpa-2.0-api-1.0.0.Final.

Spring Boot入門第二天:一個基於Spring Boot的Web應用,使用了Spring Data JPAFreemarker。

per pan let mysq 應用 posit ble host thead 今天打算從數據庫中取數據,並展示到視圖中。不多說,先上圖: 第一步:添加依賴。打開pom.xml文件,添加必要的依賴,完整代碼如下: <?xml version="1.0" enco

Spring Boot 的數據訪問:JPA MyBatis

raw -m manager varchar 127.0.0.1 bind temp builder tro JPA(Java Persistence API)是一個基於O/R映射(Object-Relational Mapping)的標準規範,主要實現包括Hibernat

簡述 JPA 與 Spring Data JPAHibernate

避免 down 應用開發 -m 面向 pda _id 簡寫 append 1.JPA是什麽?以及相關概述 JPA的是 Java Persistence API 的簡寫,是Sun官方提出的一種ORM規範! Sun提出此規範有2個原因: 1.簡化現有Java EE和Java

迷茫於Hibernate/JPA的人提一些建議。

優化技巧 jdbc 性能優化 異常錯誤 dong 級聯 管理機 schema body 想對那些“迷惑”於Java ORM框架的J2EE開發人員提一些建議,希望能夠對他們 更深入的理解和運用J2EE ORM框架來提速工作有所幫助,這些建議可能顯得有些”陳舊“和”膚淺“, 因

Spring MVC+Hibernate JPA搭建的博客系統項目中所遇到的坑

phoenix min ews googl exc ssl dia one UC 標簽: springmvc hibernate 2016年12月21日 21:48:035133人閱讀 評論(0) 收藏 舉報 分類: Spring/Spring MVC(6)

如何使用多數據源,同時使用jpajdbctemplate

bsp nta utf8 npr gis 控制臺管理 iba ogg 需要 spring: datasource: first: type: com.alibaba.druid.pool.DruidDataSource url: jdbc:my

Hibernate JPA中@Transient、@JsonIgnoreProperties、@JsonIgnore、@JsonFormat、@JsonSerialize等註解解釋

json 框架 代碼 mat per nbsp str 作用 tran 1、@Transient @Transient表示該屬性並非一個到數據庫表的字段的映射,ORM框架將忽略該屬性;如果一個屬性並非數據庫表的字段映射,就務必將其標示為@Transient,否則ORM框架

SpringBoot數據庫訪問工具(JdbcTemplate、MyBatis、JPAHibernate)

etl find tiger con repo 定義 pid auto 關系型數據庫 SpringBoot數據庫訪問 關系型數據庫訪問(RDBMS) 采用JdbcTemplate、MyBatis、JPA、Hibernate等技術。 一、JdbcTemplate工具 1.在p

2-2、Mybatis 轉 JPA輕量級Hibernate使用介紹

JPA 做為spring 開源的子專案,一個spring 框架中的一種,它符合Hibernate的使用規範。作為spring boot 和spring cloud 的首選ORM,是快速開發的神器。https://projects.spring.io/spring-data-jpa/ JPA的優勢:運維再也不