使用JPA @Transient批註忽略字段
瀏覽人數:1,120最近更新:
- JPA
- Hibernate
- java
1.簡介
當使用對象關係映射(ORM)框架將Java對象持久存儲到數據庫記錄中時,我們經常想忽略某些字段。如果框架符合Java Persistence API(JPA),則可以在這些字段中@Transient
在本教程中,我們將演示@Transient
批註的正確用法。我們還將研究它與Java內置的transient
關鍵字的關係。
2. @Transient
註釋與transient
關鍵詞
通常有一些困惑過關係@Transient
註釋和Java的內置transient
關鍵字。 transient
關鍵字主要用於在Java對象序列化過程中忽略字段,但是它也可以防止在使用JPA框架時保留這些字段。
**換句話說,當保存到數據庫中時transient
關鍵字的作用與@Transient
但是,@ @Transient
批註不會影響Java對象的序列化。
**
3. JPA @Transient
示例
假設我們有一個User
類,它是一個JPA實體,它映射到數據庫中的Users表。當用戶登錄時,我們從“用戶”表中檢索其記錄,然後在“ User
實體上設置一些其他字段。這些多餘的字段與“用戶”表中的任何列都不對應,因為我們不想保存這些值。
User
實體上設置一個時間戳,該時間戳表示用戶何時登錄其當前會話:
@Entity
@Table(name = "Users")
public class User {
@Id
private Integer id;
private String email;
private String password;
@Transient
private Date loginTime;
// getters and setters
}
當我們使用像Hibernate這樣的JPA提供程序User
對象保存到數據庫時,由於@Transient
批註loginTime
如果我們序列化此User
對象並將其傳遞給系統中的另一個服務,則loginTime
字段將包含在序列化中。如果我們不希望包括這個領域,我們可以更換@Transient
與註釋transient
關鍵字來代替:
@Entity
@Table(name = "Users")
public class User implements Serializable {
@Id
private Integer id;
private String email;
private String password;
private transient Date loginTime;
//getters and setters
}
現在,在數據庫持久性和對象序列化期間loginTime
4。結論
在本文中,我們研究瞭如何在典型的用例中@Transient
請務必查看有關JPA的其他文章,以了解有關持久性的更多信息。
本作品係原創或者翻譯,採用《署名-非商業性使用-禁止演繹4.0國際》許可協議