如何在使用 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);
}
};
}
将 @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);
}
};
}