SpringDataJPA筆記(11)-Transient註解
在 JAVA種,只要該類實現了Serilizable接口,然後在不需要序列化的屬性前添加關鍵字transient,則序列化對象的時候會忽略transient修飾的屬性
我們在定義實體類的時候,有一些屬性我們不需要持久化到數據庫,這種時候我們就可以使用Transient註解,用於標註該字段不需要添加到數據庫表,而且即使實體類沒有實現Serilizable接口,也會忽略該屬性
例如如下一個實體類
@Data
@Entity
@Table(name = "transient_tb")
public class TransientEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Transient
private String trrr;
}
在實際數據庫中查看該表的字段,依然沒有該trrr字段
CREATE TABLE transient_tb
(
id
bigint(20) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
但是我們通常要求實體類還是要實現Serilizable接口,因爲這樣可以讓實體類序列化和反序列化,通過流的方式被傳遞
通常在使用Transient註解的時候,會發現有兩個包同時有這個註解,在不同的情況下需要引入的是不同的包註解
在使用MySQL的時候需要引入的是
import javax.persistence.Transient;
在使用MongoDB的時候需要引入是
import org.springframework.data.annotation.Transient;
這點需要注意一下 不要引入了錯誤的包,從而達不到想要的效果
這是因爲
javax.persistence.Transient 是標準JPA的註解,並不適用與MongoDB,而org.springframework.data.annotation.Transient是spring的註解,這個纔對MongoDB有效
https://docs.spring.io/spring-data/data-document/docs/current/reference/html/#mapping-usage-annotations
歡迎關注微信交流