Spring JPA: BaseEntity не отображается - PullRequest
0 голосов
/ 13 апреля 2020

Я работаю над проектом 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)!

Есть идеи?

1 Ответ

0 голосов
/ 13 апреля 2020

Я нашел решение. Аннотируйте BaseRepository с помощью аннотации @NoRepositoryBean. Это гарантирует, что Spring Data JPA не будет пытаться создать реализацию для интерфейса BaseRepository:

@NoRepositoryBean 
interface BaseRepository<T : BaseEntity<Long>?, ID> : JpaRepository<T, ID>, JpaSpecificationExecutor<T> {
     // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...