Я работаю над проектом Spring Boot
с JPA Persistence
.
У меня есть класс базовых сущностей, например:
@MappedSuperclass
@EntityListeners(AuditingEntityListener::class)
@Access(AccessType.FIELD)
abstract class BaseEntity<T: Serializable> : Persistable<T> {
@Id @GeneratedValue
private var id: T? = null
// ...
}
, и класс сущностей, например:
@Entity
@Where(clause = "deleted = false")
class User(
@Column
val username: String,
@Column
val password: String,
//...
) : BaseEntity<Long>()
Я не хочу физически удалять записи из базы данных, поэтому я добавил класс BaseRepository
с переопределенным методом deleteById()
, как показано ниже:
interface BaseRepository<T : BaseEntity<Long>?, ID> : JpaRepository<T, ID>, JpaSpecificationExecutor<T> {
@Modifying
@Query("update #{#entityName} o set o.deleted = true where o.id = ?1")
override fun deleteById(@NonNull id: ID)
}
Теперь, после запуска проекта, я получаю эту ошибку:
Caused by: org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'baseRepository': Invocation of init method failed;
nested exception is java.lang.IllegalArgumentException:
Validation failed for query for method
public abstract void com.example.repo.BaseRepository.deleteById(java.lang.Object)!
Есть идеи?