JPA 常用注解(工作中遇到的)记录

@Inheritance(strategy=InheritanceType.JOINED)

父类存放子类和父类的公共字段, 父类和子类中存在一一对应的关系,子类的id参考父类的id

@MappedSuperclass

1.@MappedSuperclass注解只能标准在类上:@Target({java.lang.annotation.ElementType.TYPE})

2.标注为@MappedSuperclass的类将不是一个完整的实体类,他将不会映射到数据库表,但是他的属性都将映射到其子类的数据库字段中。

3.标注为@MappedSuperclass的类不能再标注@Entity或@Table注解,也无需实现序列化接口。

@PreUpdate

用于为相应的生命周期事件指定回调方法。 该注释可以应用于实体类,映射超类或回调监听器类的方法。 用于setter

举个例子每次更新时自动更新更新时间字段

/**
	 * 修改日期
	 */
	protected Date updateDate;
	
	@Column(name = "update_date")
	public Date getUpdateDate() {
		return updateDate;
	}
	
	public void setUpdateDate(Date updateDate) {
		this.updateDate = updateDate;
	}
	
	
    @PreUpdate
    public void preUpdate() {
    	this.setUpdateDate(new Date());
    }
	

@PrePersist

可以用来在使用jpa的时记录一些业务无关的字段,比如最后更新时间等等。 生命周期方法注解(delete没有生命周期事件)

     /**
	 * 创建日期
	 */
	protected Date createDate;
	
	/**
	 * 修改日期
	 */
	protected Date updateDate;
	
	@Column(name = "create_date", updatable = false)
	public Date getCreateDate() {
		return createDate;
	}
	
	public void setCreateDate(Date createDate) {
		this.createDate = createDate;
	}
	

	
	@Column(name = "update_date")
	public Date getUpdateDate() {
		return updateDate;
	}
	
	public void setUpdateDate(Date updateDate) {
		this.updateDate = updateDate;
	}
	
	//自动更新创建时间和更新时间
	@PrePersist
    public void prePersist() {
		if(this.createDate == null){
			this.setCreateDate(new Date());
		}
		this.setUpdateDate(new Date());
    }
	

@DynamicUpdate

当mysql字段类型为timestamp时必须在实体类上加上该注解实体类才会在更新的时候修改更新时间

@GenericGenerator 自定义生成策略

    @Id
    @GeneratedValue(generator = "fsId")
    @GenericGenerator(name = "fsId", strategy = "com.fs.AssignedGUIDGenerator")
package com.fs;
 
import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.id.IdentifierGenerator;
import org.hibernate.id.UUIDHexGenerator;
 
import java.io.Serializable;
 
public class AssignedGUIDGenerator extends UUIDHexGenerator implements IdentifierGenerator{
 
    @Override
    public Serializable generate(SharedSessionContractImplementor session, Object object) throws HibernateException {
        Serializable id = session.getEntityPersister(ENTITY_NAME, object).getIdentifier(object, session);
        if (id==null || id.toString().equals("")) {
            id = super.generate(session,object);
        }
        return id;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SUNbrightness

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值