基于JPA實(shí)體類(lèi)監(jiān)聽(tīng)器@EntityListeners注解的使用實(shí)例
JPA實(shí)體類(lèi)監(jiān)聽(tīng)器@EntityListeners注解的使用
被@Prepersist注解的方法 ,完成save之前的操作。
被@Preupdate注解的方法 ,完成update之前的操作。
被@PreRemove注解的方法 ,完成remove之前的操作。
被@Postpersist注解的方法 ,完成save之后的操作。
被@Postupdate注解的方法 ,完成update之后的操作。
被@PostRemovet注解的方法 ,完成remove之后的操作。
自定義實(shí)體類(lèi)監(jiān)聽(tīng)類(lèi):
import org.springframework.stereotype.Component; import javax.persistence.PostPersist; import javax.persistence.PostUpdate; import javax.persistence.PrePersist; import javax.persistence.PreUpdate; public class TestEntityListeners { @PrePersist public void PrePersist(Object entity){ System.out.println("開(kāi)始保存--"+entity.toString()); } @PreUpdate public void PreUpdate(Object entity){ System.out.println("開(kāi)始更新--"+entity.toString()); } @PostPersist public void PostPersist(Object entity){ System.out.println("結(jié)束保存--"+entity.toString()); } @PostUpdate public void PostUpdate(Object entity){ System.out.println("結(jié)束更新--"+entity.toString()); } }
實(shí)體類(lèi)上增加注解:
@EntityListeners(value = {TestEntityListeners.class})
@Entity @Table(name = "product") @EntityListeners(value = {TestEntityListeners.class}) public class Product { private int id; private String productId; private String productName; //getter setter toString() }
寫(xiě)兩個(gè)測(cè)試保存、更新的方法:
import com.goods.evaluate.entity.Product; import com.goods.evaluate.service.TestService1; import com.goods.evaluate.repository.ProductRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Optional; @Service public class TestService implements TestService1 { @Autowired private ProductRepository productRepository; @Transactional public void testSave(){ Optional<Product> product = productRepository.findById(10); productRepository.save(product.orElse(null)); System.out.println("保存。。。"); } @Transactional public void testUpdate(){ productRepository.updateProduct("test10"); System.out.println("更新。。。"); } }
執(zhí)行結(jié)果:
未執(zhí)行監(jiān)聽(tīng)器內(nèi)容? 暫不清楚是什么原因
這是Application的配置:
@SpringBootApplication @EnableSpringConfigured @EnableJpaAuditing @EnableAspectJAutoProxy(proxyTargetClass=true) public class EvaluateApplication { public static void main(String[] args) { SpringApplication.run(EvaluateApplication.class, args); } }
@MappedSupperclass、@EntityListeners注解注意事項(xiàng)
1. @MappedSupperclass注解
(1) 該注解標(biāo)注在類(lèi)上,用來(lái)標(biāo)識(shí)父類(lèi);
(2) 該注解標(biāo)識(shí)的類(lèi)不能映射到數(shù)據(jù)庫(kù),被標(biāo)識(shí)的類(lèi)的屬性必須通過(guò)子類(lèi)來(lái)映射;
(3) 該注解標(biāo)識(shí)了類(lèi)之后,不能再有@Entity和@Table注解標(biāo)識(shí)該類(lèi)
(4) 標(biāo)識(shí)有該注解的類(lèi),通常屬性上用以下注解@Id @GeneratedVale(strategy=GenerationType.IDENTITY) 、
@CreateDate 、 @CreateBy、@LastModifiedBy、@LastModifiedDate等注解用在父類(lèi)上,子類(lèi)基礎(chǔ)該父類(lèi)即可,
并在子類(lèi)標(biāo)注@Table和@Entity
2.@EntityListeners(AuditingEntityListener.class)注解
(1) 該注解用于監(jiān)聽(tīng)實(shí)體類(lèi),在save、update之后的狀態(tài)
(2) 使用了@EntityListeners(AuditingEntityListener.class)之后,記得在Application
啟動(dòng)類(lèi)上加@EnableJpaAuditing,不然@CreateDate,@LastModifiedBy不生效
3.啟用@EnableJpaAuditing,配置AuditorAware實(shí)現(xiàn)類(lèi)
(1)只有使用了@EnableJpaAuditing注解,@CreateDate @LastModifiedBy等注解才會(huì)生效;
(2) 只有實(shí)現(xiàn)了AuditorAware接口,才會(huì)指定@CreateBy用戶(hù)名信息。
//AuditorAware 實(shí)現(xiàn)類(lèi),指定當(dāng)前操作用戶(hù)信息 @Configuration public class UserAuditorConfig implements AuditorAware<String> { @Override public Optional<String> getCurrentAuditor() { return Optional.of(SpringSecurityHolder.currentUserName()); } }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決 IDEA 創(chuàng)建 Gradle 項(xiàng)目沒(méi)有src目錄問(wèn)題
這篇文章主要介紹了解決 IDEA 創(chuàng)建 Gradle 項(xiàng)目沒(méi)有src目錄問(wèn)題,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-06-06MyEclipse開(kāi)發(fā)一個(gè)webservice接口
這篇文章主要為大家詳細(xì)介紹了MyEclipse開(kāi)發(fā)一個(gè)webservice接口,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07Springboot實(shí)例講解實(shí)現(xiàn)專(zhuān)業(yè)材料認(rèn)證管理系統(tǒng)流程
這是一個(gè)基于java的畢業(yè)設(shè)計(jì)項(xiàng)目,畢設(shè)課題為springboot框架的知識(shí)產(chǎn)權(quán)服務(wù)平臺(tái)系統(tǒng),是一個(gè)采用b/s結(jié)構(gòu)的javaweb項(xiàng)目,需要的朋友可以參考下2022-06-06