You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
30 lines
1.1 KiB
30 lines
1.1 KiB
package com.mydreamjob.auth;
|
|
|
|
import org.springframework.data.jpa.repository.JpaRepository;
|
|
import org.springframework.data.jpa.repository.Lock;
|
|
import org.springframework.data.jpa.repository.Query;
|
|
import org.springframework.data.repository.query.Param;
|
|
import org.springframework.stereotype.Repository;
|
|
|
|
import jakarta.persistence.LockModeType;
|
|
|
|
import java.util.Optional;
|
|
|
|
@Repository
|
|
public interface UserRepository extends JpaRepository<User, Long> {
|
|
Optional<User> findByPhone(String phone);
|
|
|
|
@Lock(LockModeType.PESSIMISTIC_WRITE)
|
|
@Query("select u from User u where u.phone = :phone")
|
|
Optional<User> findByPhoneForUpdate(@Param("phone") String phone);
|
|
|
|
@Lock(LockModeType.PESSIMISTIC_WRITE)
|
|
@Query("select u from User u where u.id = :id")
|
|
Optional<User> findByIdForUpdate(@Param("id") Long id);
|
|
Optional<User> findByEmail(String email);
|
|
boolean existsByPhone(String phone);
|
|
boolean existsByEmail(String email);
|
|
|
|
/** 统计主角色为给定角色且处于启用状态的用户数(用于最后一个有效 ADMIN 保护)。 */
|
|
long countByRoleAndActiveTrue(User.Role role);
|
|
}
|
|
|