【问题标题】:JPARepository findAllByUsername return null but data existJPARepository findAllByUsername 返回 null 但数据存在
【发布时间】:2019-07-07 12:48:20
【问题描述】:

我有一个简单的系统(控制器、服务、存储库),但即使数据存在于数据库中,服务也会返回空值

数据

mysql> select * from customer;
+----+---------------+
| id | username      |
+----+---------------+
|  4 | liparistudios |
+----+---------------+

@Data
@Entity
@Table(name = "customer")
public class Customer implements Serializable {
    private static final long serialVersionUID = 201811031445L;

    @Id
    @GeneratedValue( strategy = GenerationType.SEQUENCE )
    private Long id;

    private String username;

控制器

Customer c = customerService.searchCustomerByUsername( usernameToFind );

服务

@Service
public class CustomerService {

    @Autowired
    private CustomerRepo repo;

    public Customer searchCustomerByUsername( String username ) {
        return repo.findAllByUsername( username );
    }

存储库

@Repository
@Transactional
public interface CustomerRepo extends JpaRepository<Customer, Long> {
    @Query(
        value = "SELECT * FROM Customer c WHERE username = ':username' ORDER BY username ASC LIMIT 1",
        nativeQuery = true
    )
    public Customer findAllByUsername(@Param("username") String username );

【问题讨论】:

  • 你能上传你的示例项目吗?
  • @KedarJoshi 你是对的!
  • 当然,这与 JPA API 无关,而与“Spring Data JPA”API 无关。完全不同

标签: sql spring-boot spring-data-jpa


【解决方案1】:

绑定参数不应包含在引号内。确保删除 :username 周围的单引号。

正确的查询是SELECT * FROM Customer c WHERE username = :username ORDER BY username ASC LIMIT 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 2022-01-23
    • 2021-06-06
    • 2021-04-25
    • 1970-01-01
    • 2019-06-08
    相关资源
    最近更新 更多