
Все конечные точки работали, только удаление конечных точек не работает. Я работаю над Base Entity для удобства чтения кода:
package com.cloud.atlas.base.entity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.SuperBuilder;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.io.Serializable;
import java.time.LocalDateTime;
@SuperBuilder
@EntityListeners({ AuditingEntityListener.class })
@Data
@EqualsAndHashCode
@NoArgsConstructor
@ToString
@MappedSuperclass
public abstract class BaseEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", length = 50)
protected Long id;
@CreatedDate
@Column(name = "created_at")
protected LocalDateTime createdAt;
@LastModifiedDate
@Column(name = "updated_at")
protected LocalDateTime updatedAt;
@Column(name = "deleted_at")
protected LocalDateTime deletedAt;
@Column(name = "is_active", nullable = false)
private boolean isActive = true;
@Column(name = "is_deleted", nullable = false)
private boolean isDeleted = false;
@CreatedBy
@Column(name = "created_by")
private String createdBy;
@LastModifiedBy
@Column(name = "updated_by")
private String updatedBy;
@Version
@Column(name = "version")
private Long version;
@PrePersist
public void onCreate() {
this.createdAt = LocalDateTime.now();
this.updatedAt = LocalDateTime.now();
}
@PreUpdate
public void onUpdate() {
this.updatedAt = LocalDateTime.now();
}
public abstract void update(T entity);
}
И модель разрешений:
@EqualsAndHashCode(callSuper = false)
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Entity
@Table(name = "permission")
@SQLDelete(sql = "UPDATE permission SET is_deleted = true WHERE id=?")
@Where(clause = "is_deleted=false")
public class Permission extends BaseEntity {
@Column(nullable = false)
private String alias;
@Column
private String author;
@Column
private String title;
@Column
private String description;
@Column
private Integer status;
@Override
public void update(T entity) {
Permission permission = (Permission) entity;
this.alias = permission.alias;
this.title = permission.title;
this.description = permission.description;
this.status = permission.status;
this.author = permission.author;
}
}
Терминал сообщает:
nput: [100]
output: could not delete: [com.cloud.atlas.domain.Permission#100]; SQL [UPDATE permission SET is_deleted = true WHERE id=?]; nested exception is org.hibernate.exception.DataException: could not delete: [com.cloud.atlas.domain.Permission#100]
2024-10-03 10:33:16.710 ERROR 22188 --- [nio-9060-exec-3] GLOBAL_EXCEPTION_HANDLER : An error occurred
org.springframework.dao.DataIntegrityViolationException: could not delete: [com.cloud.atlas.domain.Permission#100]; SQL [UPDATE permission SET is_deleted = true WHERE id=?]; nested exception is org.hibernate.exception.DataException: could not delete: [com.cloud.atlas.domain.Permission#100]
Когда я исследовал эту проблему, в решении говорилось, что если вы используете команду, допускающую значение NULL, вам нужно использовать такую длину: @Column(nullable = false, length = 4096), и это так. не решит мою проблему.
Неправильно, но если я не смогу решить, я добавлю конечную точку мягкого удаления с аннотацией PUT и просто обновлю часть is_deleted до true.
Спасибо за вашу помощь!
Изменить: когда я удаляю эти строки, проблема решается, но удаление больше не является мягким:
@SQLDelete(sql = "UPDATE permission SET is_deleted = true WHERE id=?")
@Where(clause = "is_deleted=false")
Подробнее здесь: https://stackoverflow.com/questions/790 ... nexception
Мобильная версия