Loading

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一起用
posted @ 2021-12-13 01:46  ayunti  阅读(36)  评论(0)    收藏  举报