Spring Boot 实体关系级联删除问题

问题描述 投票:0回答:1

当删除用户记录时,我想删除rfid记录,当删除rfid记录时不想删除用户记录,只有一个rfid允许用于一个用户(一对一关系)也不需要存储rfid记录id在用户记录中。如何实现这一目标?

用户实体:

@Entity()
@NoArgsConstructor
@AllArgsConstructor
@Data
@Table(name = "users")
public class User {
    @Id()
    @Column(columnDefinition = "serial")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Access(AccessType.PROPERTY)
    private int id;

    @Size(max=200, min=5, message = "Username must be between 5 and 200 characters")
    @Column(unique = true, nullable = false, length = 200)
    private String username;

    @Column(nullable = false, columnDefinition = "text")
    private String passwordHash;

    @ManyToMany(fetch = FetchType.EAGER)
    private Set<UserRole> roles = new HashSet<>();

    // eml or phn
    @Column(nullable = false)
    @Enumerated(EnumType.STRING)
    private AuthTypes authType;

}

RFID实体:

@Entity()
@NoArgsConstructor
@AllArgsConstructor
@Data
@Table(name = "rfid")
public class RFID {

    @Id()
    @Column(columnDefinition = "serial")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @Size(max=200,min = 10, message = "RFID must be between 10 and 200 characters")
    @Column(columnDefinition = "text", nullable = false, unique = true)
    private String rfid;

    @OneToOne(cascade = CascadeType.REMOVE, fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id", referencedColumnName = "id",nullable = false,unique = true)
    private User user;

    @CreatedDate
    @CreationTimestamp
    @Column(name = "created_at", updatable = false)
    private Date createdAt;

    @LastModifiedDate
    @Column(name = "updated_at")
    private Date updatedAt;
}

没有在用户表中存储rfid记录我想在删除用户记录时删除rfid

java spring-boot spring-data-jpa
1个回答
0
投票

我找到了解决办法:

RFID实体:

@Entity()
@NoArgsConstructor
@AllArgsConstructor
@Data
@Table(name = "rfid")
public class RFID {

    @Id()
    @Column(columnDefinition = "serial")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @Size(max=200,min = 10, message = "RFID must be between 10 and 200 characters")
    @Column(columnDefinition = "text", nullable = false, unique = true)
    private String rfid;

    @OneToOne()
    @JoinColumn(name = "user_id")
    private User user;

    @CreatedDate
    @CreationTimestamp
    @Column(name = "created_at", updatable = false)
    private Date createdAt;

    @LastModifiedDate
    @Column(name = "updated_at")
    private Date updatedAt;
}

用户实体:



@Entity()
@NoArgsConstructor
@AllArgsConstructor
@Data
@Table(name = "users")
public class User {
    @Id()
    @Column(columnDefinition = "serial")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Access(AccessType.PROPERTY)
    private int id;

    @Size(max=200, min=5, message = "Username must be between 5 and 200 characters")
    @Column(unique = true, nullable = false, length = 200)
    private String username;

    @Column(nullable = false, columnDefinition = "text")
    private String passwordHash;

    @ManyToMany(fetch = FetchType.EAGER)
    private Set<UserRole> roles = new HashSet<>();

    @OneToOne(cascade = CascadeType.REMOVE, fetch = FetchType.LAZY, mappedBy = "user")
    private  RFID rfid;

    // eml or phn
    @Column(nullable = false)
    @Enumerated(EnumType.STRING)
    private AuthTypes authType;

}
© www.soinside.com 2019 - 2024. All rights reserved.