如何在使用JpaRepository时始终返回实体@Id?

时间:2018-04-01 18:49:03

标签: spring spring-data-jpa spring-data-rest

@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") - 由于某种原因,默认行为似乎是而不是返回此字段。

要么指出我的错误或向我解释为什么这是默认行为(并且是一个好主意)的额外点。

1 个答案:

答案 0 :(得分:2)

您的问题是Spring Data REST(您应该更新标签) - 它会自动转换&#39;您的存储库为HATEOES的REST控制器,其中资源ID是包含在资源自身链接中的一部分,如:/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);
        }
    };
}