Spring Data: Jpa 注解的理解

Preface: 希望你之前有用过Jpa。参考Spring data书籍学习,并且提炼其中有用的东西,有些知识点,可能在工作也没有用到过,但却将来会用到。若我发现书中有错,我也会在这里指出。最后会有代码传送门。

@MappedSuperclass

此注解上面的类不是作为一张表,也不是一个实体类,此注解的类会将其属性带到继承它的类的表中。所以可以把公共的属性抽取出来放在此注解的类下面。如id生成

Spring Data: Jpa 注解的理解_第1张图片 

@Embeddable

 注解的中文意思就是“可嵌入的”这个注解有点意思,此注解的将其属性放到包含它的类的所对应的表中。此注解的类通常用来表述领域的概念,而领域本身可以做一些约束,如邮箱,开始时间和结束时间(开始时间肯定早于结束时间),但是我以前看过很多别人写的代码都是在自己的Controller里面做判断,或者做个自定义注解,当你get到这个注解用法 ,公司的项目开始的时候就可以为你公司制定好规范

Spring Data: Jpa 注解的理解_第2张图片

当时我在看书的时候我就留意(unique = true)这里。我实操的时候发现unique属性其实是不起作用的。唯一性的结束不起作用,而且这种唯一其实只是在generateDDL的时候会有用,其实真正校验还是交还给DB, 如果想让应用在建表的时候做唯一约束可以在类上加

@Table(uniqueConstraints={@UniqueConstraint(columnNames={"email"})})

其中email这个属性就是数据库表里面的字段名字。在应用运行的时候是不起作用,在启动应用,如果你让应用自己去建表的,在你启用应用配置spring.jpa.hibernate.ddl-auto=create-drop

日志上面会有:

也就是往数据库里面加了唯一结束。

Address的生命周期受Customer控制,在领域驱动设计术语中,Customer称为聚合根(aggregate root)

Spring Data: Jpa 注解的理解_第3张图片

@ElementCollection

上面会创建一个表名为product_attributes,然后有表字段有attributes,attributes_key.但是在生产当中我们通常会以下面这种用法:

 

@Entitypublic 
class Product extends AbstractEntity {
    @Column(nullable = false)private String name;  
    //... SOME CODE HERE  @ElementCollection//name 指定表名 att,外键 att_id
    @CollectionTable(name = "att" , joinColumns = @JoinColumn(name = "att_id"))
    private Map attributes = new HashMap();
}

 数据库中的表是这样子

Spring Data: Jpa 注解的理解

 

花了点时间写了这篇文章,但感觉干货并不多。

传送门:https://github.com/AdrainHuang/spring-data-study

 

 

 

你可能感兴趣的:(Spring,Spring,Spring,Data,jpa,Jpa)