版权声明:本文为博主原创文章,未经博主允许不得转载 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;//标准花费
}