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 { Optional findByPhone(String phone); @Lock(LockModeType.PESSIMISTIC_WRITE) @Query("select u from User u where u.phone = :phone") Optional findByPhoneForUpdate(@Param("phone") String phone); @Lock(LockModeType.PESSIMISTIC_WRITE) @Query("select u from User u where u.id = :id") Optional findByIdForUpdate(@Param("id") Long id); Optional findByEmail(String email); boolean existsByPhone(String phone); boolean existsByEmail(String email); /** 统计主角色为给定角色且处于启用状态的用户数(用于最后一个有效 ADMIN 保护)。 */ long countByRoleAndActiveTrue(User.Role role); }