JPA

 

实体类

@Table(name = "test_info")
@Entity
@Data
@GenericGenerator(name = "uuid2", strategy = "uuid2")
public class TestInfo {
    @Id
    @GeneratedValue(generator = "uuid2")
    @ApiModelProperty(value = "id")
    private String id;
    @ApiModelProperty(name = "标题")
    private String title;
    @ApiModelProperty(name = "内容", required = true)
    private String content;
DAO层

1、update语句需要在方法上添加@Modifying注解

2、delete语句需要在类上添加@Transactional注解【

import org.springframework.transaction.annotation.Transactional;

public interface PushInfoDao extends JpaRepository<PushInfo, String>, JpaSpecificationExecutor<PushInfo> {


    @Modifying
    @Query("update PushInfo t set t.status=2 where t.id=?1")
    void updateStatusSuccess(String id);
    //也可以直接写方法
    Integer countAllByModelNameAndCreateUserName(String modelName, String createUserName);

    @Query("select t from TestInfot where t.title like %?1% ")
    List<TestInfo> findErrorTestInfo(String title );

}

配置

hibernate.hbm2ddl.auto

create:
每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。
create-drop :
每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。
update:
最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。
validate :
每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。

多表

@ManyToOne

用户表和部门表,用户对应部门属于多对一的关系

@Data
@Table(name = "test_user")
@Entity
@GenericGenerator(name = "uuid", strategy = "uuid")
public class User implements Serializable {
    @Id
    @Column(length = 32)
    @GeneratedValue(generator = "uuid")
    private String id;
    private String name;
    private String password;
    private String salt;
    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.REMOVE)
    @JoinColumn
    private Department department;
}
@Data
@Table(name = "test_department")
@Entity
@GenericGenerator(name = "uuid", strategy = "uuid")
public class Department {
    @Id
    @Column(length = 32)
    @GeneratedValue(generator = "uuid")
    private String id;
    private String name;
    private String description;
}

多对多:一个用户可以拥有多种角色,一个角色可以分配给多个人

@Data
@Table(name = "test_user")
@Entity
@GenericGenerator(name = "uuid", strategy = "uuid")
public class User implements Serializable {
    @Id
    @Column(length = 32)
    @GeneratedValue(generator = "uuid")
    private String id;
    private String name;
    private String password;
    private String salt;
    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn
    private Department department;
    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private List<Role> roles;
}
@Data
@Table(name = "test_role")
@Entity
@GenericGenerator(name = "uuid", strategy = "uuid")
public class Role {
    @Id
    @Column(length = 32)
    @GeneratedValue(generator = "uuid")
    private String id;
    private String name;
    private String description;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rorschach01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值