Hibernate @OneToOne 自动新增和删除

简介: 版权声明:本文首发 http://asing1elife.com ,转载请注明出处。 https://blog.csdn.net/asing1elife/article/details/82811799 ...
版权声明:本文首发 http://asing1elife.com ,转载请注明出处。 https://blog.csdn.net/asing1elife/article/details/82811799

Hibernate创建一对一关系时两张表主表保持一致则可以实现自动新增和删除

更多精彩

主表配置

  1. 主表对应类中需要通过**@OneToOne**来表示其与从表的关系
@Entity
@Table(name = "sys_user")
public class User {
    @Id
    @GeneratedValue(strategy = IDENTITY)
    private Long id = new Long(0);

    @OneToOne(cascade = {CascadeType.ALL}, mappedBy = "user", fetch = FetchType.LAZY)
    @JsonIgnore
    private UserAccount userAccount;

    public UserAccount getUserAccount() {
        return userAccount;
    }

    public void setUserAccount(UserAccount userAccount) {
        this.userAccount = userAccount;
    }
}

从表配置

  1. 从表中的id需要通过**@GeneratedValue@GenericGenerator**来指明该值从主表中获取
  2. 从表中同时需要通过**@OneToOne**来表示其与主表的关系
    • 在维护与主表关系中需要通过**@PrimaryKeyJoinColumn**来表示两个表是主键关联,不存在多余外键
@Entity
@Table(name = "sys_user_account")
public class UserAccount {
    @Id
    @GeneratedValue(generator = "generator")
    @GenericGenerator(name = "generator", strategy = "foreign", parameters = @Parameter(name = "property", value = "user"))
    private Long id = 0L;

    @OneToOne(fetch = FetchType.LAZY)
    @PrimaryKeyJoinColumn
    private User user;

    public UserAccount() {
    }

    public UserAccount(User user) {
        this.user = user;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}

保存操作

  1. 主表在执行保存操作时,需要将从表注入其中,同时将主表的引入也注入到从表,才能实现两个对象的双向关联
  2. 当主表的id自增成功时,由于从表保有对主表的引用,所以也可以得到主表的id
public void save(User user) {
    if (user.isNew()) {
        user.setUserAccount(new UserAccount(user));

        super.save(user);
    } else {
        super.save(userModel);
    }
}
目录
相关文章
|
8天前
|
Java Spring
Springboot+jpa如何设置启动项目表不存在就主动创建,字段没有就新增
Springboot+jpa如何设置启动项目表不存在就主动创建,字段没有就新增
120 0
|
7月前
|
前端开发 Java 关系型数据库
【Mybatis-Plus】mybatisplus更新时,实体字段为空,数据库不更新的解决方案
【Mybatis-Plus】mybatisplus更新时,实体字段为空,数据库不更新的解决方案
262 0
|
XML Java 数据库连接
Mybatis 批量将list数据插入到数据库竟然这样处理
Mybatis 批量将list数据插入到数据库竟然这样处理
266 0
|
8天前
|
Apache
修改mybatis-plus更新策略
修改mybatis-plus更新策略
21 0
|
8天前
|
SQL 存储 Java
Mybatis练习(增加,删除,修改)
Mybatis练习(增加,删除,修改)
44 0
|
9月前
MyBaits保存更新删除
MyBaits保存更新删除
30 0
|
10月前
JDBCTemplate自动创建表自动插入记录
JDBCTemplate自动创建表自动插入记录
|
10月前
|
SQL Java 数据库
spring boot CRUD(查询全部,查询ID,模糊查询,删除id,全部删除,新增多条/单条 修改)(一)
spring boot CRUD(查询全部,查询ID,模糊查询,删除id,全部删除,新增多条/单条 修改)(一)
135 0
|
10月前
|
Java Spring
spring boot CRUD(查询全部,查询ID,模糊查询,删除id,全部删除,新增多条/单条 修改)(二)
spring boot CRUD(查询全部,查询ID,模糊查询,删除id,全部删除,新增多条/单条 修改)(二)
90 0
|
SQL Java 数据库连接
MyBatis-Plus批量新增方法
MyBatis-Plus 是基于 MyBatis 进行封装的一套优秀的持久层框架,它提供了丰富的便捷操作方法和强大的代码生成器,大大简化了 MyBatis 的使用。在 MyBatis-Plus 中,我们可以使用 insertBatchSomeColumn 方法来实现批量新增指定字段的操作。
1378 0