【问题标题】:Return @id fields from Spring Data JpaRepository从 Spring Data JpaRepository 返回 @id 字段
【发布时间】:2020-03-23 19:11:31
【问题描述】:

我继承了一个 MASSIVE Java 应用程序,但在尝试解决它时遇到了很多问题。我有一个关于 Spring JpaRepository 的具体问题。请注意,我刚从 Spring 开始,还不确定。

我有一个带有 @RepositoryRestResource 注释的存储库。

@RepositoryRestResource
public interface GoodsReceiptRepository extends JpaRepository<GoodsReceipt, GoodsReceiptId> {

我也有@Entity:

@Entity
@Table(name = AvisoPosition.TABLE)
@IdClass(AvisoPositionId.class)
public class AvisoPosition implements Serializable {

@Entity
@Table(name = GoodsReceipt.TABLE)
@IdClass(GoodsReceiptId.class)
public class GoodsReceipt implements Serializable { 

JSON 响应中不会返回带有 @Id 注释的任何字段:

@Id @Column(name = "LGNTCC")
private String accountingArea;

如何获取这些 ID 字段?

如果我删除@Id,我会得到我想要的,但我不敢这样做,因为我无法判断这会对应用程序产生什么影响。

干杯

【问题讨论】:

  • 是的,绝对不要删除 @Id 注释... JPA 需要知道什么定义了唯一记录
  • 尝试在这些字段中添加@JsonProperty( "id" )...
  • 老实说,这些可能应该已经转换为 DTO ... Spring 可能默认忽略正在序列化的 @id 字段?

标签: java json spring jpa


【解决方案1】:

您似乎正在使用Spring Data Rest,您看到的是它的默认行为。

您可以通过执行以下操作来自定义此行为:

import org.springframework.context.annotation.Configuration;
import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
import org.springframework.data.rest.webmvc.config.RepositoryRestConfigurerAdapter;

@Configuration
public class RepositoryConfig extends RepositoryRestConfigurerAdapter {
    @Override
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
        config.exposeIdsFor(YourClassNameGoesHere.class);
    }
}

【讨论】:

  • Marcos - 谢谢你,为我做的。我需要一些时间来找到正确的配置文件(大约有 10 个扩展 RepositoryRestConfigurerAdapter 的文件)——不过现在可以工作了。谢谢!
【解决方案2】:

尝试为每个实体创建一个 DTO,然后 avisoPostionDTO.setId(avisoPosition.getId()); 你只需返回每个实体的 DTO。

【讨论】:

  • 我很想这样做,但我在不同的文件中有大约 200 个 @Entity 条目,在大约 10 个项目中,我不知道它们是如何协同工作的!我将来会考虑这样做 - 谢谢。
猜你喜欢
  • 2020-12-22
  • 1970-01-01
  • 1970-01-01
  • 2019-05-13
  • 2018-10-07
  • 2017-10-18
  • 2015-08-04
  • 2016-04-19
  • 2012-02-09
相关资源
最近更新 更多