jpa
jpa
切记实体要标注 @Colmun 详细,@table,勿偷懒
springboot
entity 实体 不要使用 data类型
在联级关系中,标注 @Valid 子类的验证才生效
默认值 不要再对象 设置,使用注解方式 设置默认值. (兼容查询Example 空值忽略)
Serializable 支持序列化,redis 缓存需要对象序列化
查询
// springboot jpa-data不支持 group by 分组查询,原生jpa支持
//创建匹配器,即如何使用查询条件
ExampleMatcher matcher = ExampleMatcher.matching() //构建对象
.withMatcher("materialName", GenericPropertyMatchers.contains()) //姓名采用“开始匹配”的方式查询
.withMatcher("registerTime", GenericPropertyMatchers.contains()) //姓名采用“开始匹配”的方式查询
.withMatcher("status", GenericPropertyMatchers.contains()) //姓名采用“开始匹配”的方式查询
.withIgnorePaths("id"); //忽略属性:是否关注。因为是基本类型,需要忽略掉
//创建实例
Example<LostProperty> ex = Example.of(obj, matcher);
多对多
id 生成器
@GeneratedValue(strategy = GenerationType.IDENTITY)
TABLE,
SEQUENCE,
IDENTITY,
UUID,
AUTO;
单张表都可以、多张表共同id 使用 SEQUENCE
@ManyToMany
mappedBy 交给对方管理关系 ,如果不交给对方管理,会有一个中间表
嵌入式
// 两个类 一个表
@Embeddable
class Dog : BaseDb(){
override var name: String=""
}
@Entity
class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
var id: Long = 0
@Embedded
var a:Dog?=null
}
/**
*@ElementCollection
* 和一对多 类似,会自动维护一个表
* ElementCollection注解只能用于集合类型的属性,例如List、Set、Map等。它不能用于数组类型。
*
* 适用于 简单 集合,如,一个人有多个手机号
*/
/**
*
* @EmbeddedId
*
* 嵌入式id,可以用于多个id
* 如 租户, id+uid 确定一条数据
*
*/
/**
* @MapsId
* 一对一关系 中告诉 从 的id和主的id相同
*/
继承
//使用场景,数据多态,比如一个商品 有不同类型,每个类型的sku不同
@Inheritance 和@entity一起用
InheritanceType.SINGLE_TABLE 这个策略表示子实体和父实体 共用一张表
//--------
@MappedSuperclass 这个继承基类,不会保存数据库,不能是@entity一起用