JPA及部分Hibernate注解学习
@OneToOne
javax.persistence.OneToOne
// 例子,一个城市唯一归属一个省份
// 那么城市和省份是一对一(OneToOne)的关系
@DynamicInsert
public class City extends BaseEntity{
private Province province;
@OneToOne(fetch = FetchType.LAZY)
public Province getProvince() {
return province;
}
}
// 例子,一个实体类(Entity)包含多个字段(Field)
// 实体类和字段是一对多(OneToMany)的关系
// 字段和实体类时多对一(ManyToOne)的关系
@DynamicInsert
public class Entity extends BaseEntity{
private Set<Field> allFields;
@OneToMany(cascade = { CascadeType.ALL }, mappedBy = "entity")
@Fetch(FetchMode.SUBSELECT)
@OrderBy("sortSeq asc")
public Set<Field> getAllFields() {
return allFields;
}
}
@DynamicInsert
public class Field extends BaseEntity{
private Entity entity;
@ManyToOne
public Entity getEntity() {
return entity;
}
}
@ManyToMany
javax.persistence.ManyToMany
// 例子,一个角色(Role)包含多个权限(Right)
// 一个权限(Right)也可以被多个角色(Role)引用
// 角色和权限是(ManyToMany)的关系
@DynamicInsert
public class Role extends BaseEntity {
private Set<Right> allRights;
@ManyToMany(fetch = FetchType.LAZY)
@OrderBy("sortSeq asc")
public Set<Right> getAllRights() {
return allRights;
}
}
@DynamicInsert
public class Right extends BaseEntity{
private Set<Role> roles;
// 指定由角色表来维护关系,则roles无须加@DodoField注解
@ManyToMany(mappedBy = "allRights", fetch = FetchType.LAZY)
public Set<Role> getRoles() {
return roles;
}
@Column(length = 128)
public String getRightRemark() {
return rightRemark;
}
// 设置字段长度8,非空,唯一性索引
@Column(nullable = false, length = 8, unique = true)
public String getRightCode() {
return this.rightCode;
}
// 设置金额精度为15,保留小数点后2位
@Column(precision = 15, scale = 2)
public BigDecimal getAmount() {
return amount;
}
@Convert
javax.persistence.Convert
/**
* 实体类中使用
**/
public class BaseTypeDemo extends BaseEntity {
@DodoField(sortSeq = 13, name = "枚举类型字段")
private DemoEnum enumField;
//......
// 指定属性值转换器
@Convert(converter = DemoEnum.Converter.class)
public DemoEnum getEnumField() {
return enumField;
}