JPA

基本注解

注解都是import javax.persistence 包下的
1.@Entity 在实体类上标此注解说明是jpa实体类
2.@Table(name=“表名”)类和数据库表名的关联
3.@Id 主键 主键生成策略 @GeneratedValue(strategy=GenerationType.AUTO)
- IDENTITY:数据库id自动增长的方式
- AUTO:jpa自动选择合适的策略
- SEQUENCE:通过序列产生

 @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long accountId; 
 @GenericGenerator(
      name = "cargoCategorySequenceGenerator",
      strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
      parameters ={@Parameter(name = "sequence_name", value = "cargo_categorys_seq"),
          @Parameter(name = "initial_value", value = "1"),
          @Parameter(name = "increment_size", value = "1")
      })
  @GeneratedValue(generator = "cargoCategorySequenceGenerator")
  private Integer cargoCategoryId;

//两种BigDecimal响应json数据含有.00的方式设置
  @ApiModelProperty("账户余额")
  @JsonSerialize(using= ToStringSerializer.class)
 @Column(precision = 19, scale = 2)
  private BigDecimal account;

  @ApiModelProperty("账户返利")
  @JsonFormat(shape = JsonFormat.Shape.STRING)
 @Column(precision = 15, scale = 2)
  private BigDecimal rebate;

4.@Column 字段和属性关联

缓存

一级缓存 session级别
二级缓存 sessionFactory 级别(多session共享)

关联关系

①使用双向一对多关联,不使用单向一对多
②表字段要少,表关联不要怕多,有二级缓存撑腰,设计表尽量达到第三方式
③组合关系集合使用list(顺序,重复),多对多集合使用set
④配置对象二级缓存,不使用集合二级缓存,如果使用了集合二级缓存,集合里面的对象也必须二级缓存;查询缓存(jpql查询),没有查询条件才使用查询缓存
⑤不用一对一,用多对一取代(不要使用共享主键一对一,使用唯一外键一对一)
⑥灵活使用单向多对一关联

1.一对一

image.png

2.一对多单向关联

image.png

3.多对一单向关联

image.png

4.一对多双向

image.png

4.多对多单方维护

image.png

4.多对多双向关联(开发中使用会造成递归式的数据产生) 不能用

image.png

多对多时最好用

// 用户和角色是多对多的关系,上一种查询的时候会循环查询,有问题
class User{
@ManyToMany(cascade = CascadeType.REFRESH,fetch = FetchType.EAGER)
  @JoinTable(name = "user_has_role",
      joinColumns =@JoinColumn(name = "user_id",referencedColumnName = "id"),
      inverseJoinColumns = @JoinColumn(name = "role_id",referencedColumnName = "id"))
  private Set sysRoles=new HashSet<>();
}

class Roles{
@ManyToMany(mappedBy = "sysRoles")
  private Set users=new HashSet<>();
}

你可能感兴趣的:(JPA)