lombok 和 hibernate 配合对实体类注解

版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/kzcming/article/details/82781950

lombok的@Data注解,可以在编译过程中自动插入get/set ,有参构造,hash,toString 等方法

但是这个类如果是表中的映射类,使用的hibernate的注解映射,怎么办,请看hibernate映射注解的实例,

问题:

可以看到hibernate注解实体类时,会在每个get方法上加 @Column注解,主键上还会加@GenericGenerator,@GeneratedValue,@Id注解,按照lombok 去掉get/set的逻辑这就很难办啊

package com.money.test.entry;

import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;

/**
 * MoneyType entity. @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "money_type", catalog = "httpclientcrawler")

public class MoneyType implements java.io.Serializable {

	// Fields

	private String TId;
	private String typeName;
	private Set<MoneyTypeLittle> moneyTypeLittles = new HashSet<MoneyTypeLittle>(0);//外键

	// Constructors

	/** default constructor */
	public MoneyType() {
	}

	/** full constructor */
	public MoneyType(String typeName, Set<MoneyTypeLittle> moneyTypeLittles) {
		this.typeName = typeName;
		this.moneyTypeLittles = moneyTypeLittles;
	}

	// Property accessors
	@GenericGenerator(name = "generator", strategy = "uuid.hex")
	@Id
	@GeneratedValue(generator = "generator")

	@Column(name = "t_id", unique = true, nullable = false, length = 64)

	public String getTId() {
		return this.TId;
	}

	public void setTId(String TId) {
		this.TId = TId;
	}

	@Column(name = "type_name", length = 64)

	public String getTypeName() {
		return this.typeName;
	}

	public void setTypeName(String typeName) {
		this.typeName = typeName;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "moneyType")

	public Set<MoneyTypeLittle> getMoneyTypeLittles() {
		return this.moneyTypeLittles;
	}

	public void setMoneyTypeLittles(Set<MoneyTypeLittle> moneyTypeLittles) {
		this.moneyTypeLittles = moneyTypeLittles;
	}

}

lombok 的@Getter

后来在网上搜索相关的内容,没什么发现,但是看到一个介绍lombok注解的文章,提到了@Getter注解有一个属性,可以放入其他注解,

但是jdk7 和 jak 8 的写法不同

/**
	 * Any annotations listed here are put on the generated method.
	 * The syntax for this feature depends on JDK version (nothing we can do about that; it's to work around javac bugs).<br>
	 * up to JDK7:<br>
	 *  {@code @Getter(onMethod=@__({@AnnotationsGoHere}))}<br>
	 * from JDK8:<br>
	 *  {@code @Getter(onMethod_={@AnnotationsGohere})} // note the underscore after {@code onMethod}.
	 *  
	 * @return List of annotations to apply to the generated getter method.
	 */
	AnyAnnotation[] onMethod() default {};

lombok 配合 hibernate 注解实体类实例

如图所示,就是在每个属性上面标注@Getter注解 的onMethod上面将@Column等注解加入进来,感觉这样配起来也很麻烦,也许lombok 适合那种数据实体类,不适合这种和表关联的实体类

package com.money.test.entry;

import java.math.BigDecimal;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

import org.hibernate.annotations.GenericGenerator;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;

/**
 * MoneyUse entity. @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "money_use", catalog = "httpclientcrawler")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class MoneyUse implements java.io.Serializable {

	// Fields

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	@Getter(onMethod_={@GenericGenerator(name = "generator", strategy = "uuid.hex"),@Id,@GeneratedValue(generator = "generator"),
			@Column(name = "m_id", unique = true, nullable = false, length = 64)})
	private String mId;
	
	@Getter(onMethod_={@Column(name = "tl_id", length = 64)})
	private String tlId;
	
	@Getter(onMethod_={@Column(name = "order_amount", precision = 25, scale = 8)})
	private BigDecimal orderAmount;
	
	@Getter(onMethod_={@Column(name = "order_time")})
	private Date orderTime;
	
	@Getter(onMethod_={@Column(name = "is_out")})
	private Boolean isOut;//mysql 数据库 tinyint 字段表示Boolean ; 0 代表false ,1 代表true
	
	@Getter(onMethod_={@Column(name = "is_must")})
	private Boolean isMust;
	
	@Getter(onMethod_={@Column(name = "standard_amount", precision = 25, scale = 8)})
	private BigDecimal standardAmount;//标准花费
}

猜你喜欢

转载自blog.csdn.net/kzcming/article/details/82781950