如何在使用 JpaRepository 时始终 return entity @Id?

How to always return entity @Id when using JpaRepository?

@ReposirotyRestResource 绑定到实体 AppUser 并像这样扩展 JpaRepository

@RepositoryRestResource(collectionResourceRel = "users", path = "users")
public interface AppUserRepository extends JpaRepository<AppUser, Long> {

    AppUser findByUsername(@Param("username") String username);

}

其中 AppUser 看起来像这样:

@Entity
@Table(name = "app_user")
public class AppUser extends AbstractTimestampEntity {

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

    // ..
}

我想随时收到 id appUserRepository.findUserByUsername("whatever") - 出于某种原因,默认行为似乎是 而不是 return 这个字段。


指出我这边的错误或向我解释的加分为什么这是默认行为(也是一个好主意)。

您的问题是关于 Spring Data REST (you should update tags) - it automatically 'transforms' your repositories to REST controllers with HATEOES 的,其中资源 ID 是包含在资源自身 link 中的一部分,例如:/appUsers/1。所以默认情况下资源体不包含它的ID。

如果您需要包含它,您可以扩展 RepositoryRestConfigurerAdapter 并添加必要的公开 ID 类,例如如下所示:

@Bean
public RepositoryRestConfigurerAdapter repositoryRestConfigurerAdapter() {
    return new RepositoryRestConfigurerAdapter() {

        @Override
        public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
            config.exposeIdsFor(AppUser.class);
            super.configureRepositoryRestConfiguration(config);
        }
    };
}