-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Open
Labels
status: waiting-for-feedbackWe need additional information before we can continueWe need additional information before we can continuestatus: waiting-for-triageAn issue we've not yet triagedAn issue we've not yet triaged
Description
I have two types of entities: ordinary and ordered and two types of repositories accordingly.
@MappedSuperclass
@EntityListeners(AuditingEntityListener::class)
abstract class BaseEntity(
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) var id: Long = 0,
@CreatedDate @Temporal(TemporalType.TIMESTAMP) var createdDate: Date? = null,
@CreatedBy var createdBy: Long? = null,
@LastModifiedBy var lastModifiedBy: Long? = null,
@LastModifiedDate @Temporal(TemporalType.TIMESTAMP) var modifiedDate: Date? = null,
@Column(nullable = false) @ColumnDefault(value = "false") var deleted: Boolean = false
)
@MappedSuperclass
abstract class OrderedBaseEntity(
var ordered: Int = 0
) : BaseEntity()
@Entity
class Category(
var title: String,
var logo: String,
order: Int = 0
) : OrderedBaseEntity(order)
@NoRepositoryBean
interface JpaBaseRepository<T : BaseEntity> : JpaRepository<T, Long>, JpaSpecificationExecutor<T> {
@Modifying
@Transactional
@Query("UPDATE #{#entityName} e SET e.deleted = true WHERE e.id IN :ids AND e.deleted = false")
fun trashAllByIds(ids: List<Long>) = 0
fun findByIdAndDeletedFalse(id: Long): T?
fun trash(id: Long): T?
fun findAllNotDeleted(): List<T>
fun findAllNotDeletedPage(pageable: Pageable): Page<T>
}
@NoRepositoryBean
interface JpaOrderedBaseRepository<T : OrderedBaseEntity> : JpaBaseRepository<T> {
fun findOrderedActive(): List<T>
}
class JpaBaseRepositoryImpl<T : BaseEntity>(
entityInformation: JpaEntityInformation<T, Long>,
entityManager: EntityManager
) : SimpleJpaRepository<T, Long>(entityInformation, entityManager), JpaBaseRepository<T> {
val isNotDeletedSpecification = Specification<T> { root, _, cb -> cb.equal(root.get<Boolean>("deleted"), false) }
override fun findByIdAndDeletedFalse(id: Long) = findByIdOrNull(id)?.run { if (deleted) null else this }
@Transactional
override fun trash(id: Long): T? = findByIdOrNull(id)?.run {
deleted = true
save(this)
}
override fun findAllNotDeleted(): List<T> = findAll(isNotDeletedSpecification)
override fun findAllNotDeletedPage(pageable: Pageable): Page<T> = findAll(isNotDeletedSpecification, pageable)
}
class JpaBaseOrderedRepositoryImpl<T : OrderedBaseEntity>(
entityInformation: JpaEntityInformation<T, Long>,
entityManager: EntityManager
) : JpaBaseRepositoryImpl<T>(entityInformation, entityManager), JpaOrderedBaseRepository<T> {
override fun findOrderedActive(): List<T> =
findAll(isNotDeletedSpecification, Sort.by(Sort.Direction.ASC, "ordered"))
}
@Repository
interface CategoryRepository : JpaOrderedBaseRepository<Category>
@EnableJpaRepositories(repositoryBaseClass = JpaBaseRepositoryImpl::class)
@SpringBootApplication
class CoreApplication
Error is : Failed to create query for method public abstract java.util.List pro.talim.beta.core.common.JpaOrderedBaseRepository.findOrderedActive(); No property 'findOrderedActive' found for type 'Category'
Metadata
Metadata
Assignees
Labels
status: waiting-for-feedbackWe need additional information before we can continueWe need additional information before we can continuestatus: waiting-for-triageAn issue we've not yet triagedAn issue we've not yet triaged