Java 控制什么';s在春季连载+;冬眠

Java 控制什么';s在春季连载+;冬眠,java,spring,hibernate,Java,Spring,Hibernate,我想,我在准确理解@Autowire的工作原理方面遇到了一些问题。我当前的问题是数据模型中基于对象的关系: 假设存在多对一关系,在模型中以两种方式定义,如下所示: @Entity @Table(name = "Company") public class Company { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "Id", nullable = false) p

我想,我在准确理解
@Autowire
的工作原理方面遇到了一些问题。我当前的问题是数据模型中基于对象的关系:

假设存在多对一关系,在模型中以两种方式定义,如下所示:

@Entity
@Table(name = "Company")
public class Company {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "Id", nullable = false)
    private Integer id;

    @Column(name = "Code", nullable = false)
    private String code;

    @Column(name = "Name", nullable = false)
    private String name;

    ...


    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "CountryCodeA3")
    private Country country;

    ...


@Entity
@Table(name = "Country")
public class Country {
    @Column(name = "CodeA2", nullable = false)
    private String codeA2;

    @Id
    @Column(name = "CodeA3", nullable = false)
    private String codeA3;

    @Column(name = "CodeNum", nullable = false)
    private String codeNum;

    @Column(name = "Name", nullable = false)
    private String name;

    @OneToMany(fetch = FetchType.EAGER, mappedBy = "country")
    private Set<Company> companies;

    ...
这也不是我想要的

我想要的是使用Java中的对象,并仅为
Company.countryCodeA3
序列化像FK字段值这样的简单内容。我也不需要将整个反向关系数组交给客户机,除非我明确地告诉它(通过一个单独的函数)。我不知道如何创建一个公司并指定该公司所在的国家(而不实际将整个国家对象添加到发布的公司)

我知道如何编写函数来实际检索关系。我不知道(这就是问题所在)如何告诉他们在序列化一个特定对象时不要深入。我只想发送国家id来告诉这家公司属于哪个国家——如果是多对多的关系,一份id列表


那么,我可以告诉Spring+Hibernate只序列化简单对象,只通过单独的函数提供对象关系吗?

存在很多方法,其中之一就是使用
@JSON
注释。使用此注释,您可以控制哪些字段应该序列化/反序列化

JSON注释可用于将对象中的字段标记为默认包含的字段。可以在方法或字段上放置注释。一个很好的例子可能是包含对Zipcode对象的引用的Address对象。由于Zipcode是每个地址(在美国)不可分割的一部分,因此我们可以将其默认为注释。因此,在Address对象中,我们可以执行以下操作:

 public class Address { 
   private String name; 
   private String street; 
   private String city; 
   private String state; 
   private Zipcode zipcode; 

   @JSON 
   public Zipcode getZipcode() { } 
}
注释可以提高您的安全性,这样就可以在一个地方修复不应该通过网络发送的字段。这样,您可以更多地保留代码,并防止意外的安全缺陷。考虑在用户对象中存储密码的哈希版本。
public class User { 
  private String login; 
  private String hashedPassword; 
  private Date lastLogin; 

  @JSON(include=false) 
  public String getHashedPassword() { } 
}

嗯,这个注释会很棒,但我的IntelliJ发现不是。我也尝试了快速谷歌,但没有成功。这是春天里的东西吗?谢谢你的提示。找到了@JsonIgnore注释。它和你的样品做的一样。但仍然不是一个完整的解决方案:我想要的似乎是一个自定义序列化程序。现在我必须声明同一个字段两次,以便将其序列化为代码并在Java后端作为对象工作。我似乎越来越善于在每分钟内找到这些东西:)如果你使用Spring,你可能会更好地查找Jackson库?阿菲克·斯普林负责他们。是的,我用的是杰克逊,但我现在真的找不到这玩意儿了。。。也许只是我的链接错了,但杰克逊有同样的注释。这正是我被赋予的工作,因为我的客户现在对人力资源非常紧张。
 public class Address { 
   private String name; 
   private String street; 
   private String city; 
   private String state; 
   private Zipcode zipcode; 

   @JSON 
   public Zipcode getZipcode() { } 
}
public class User { 
  private String login; 
  private String hashedPassword; 
  private Date lastLogin; 

  @JSON(include=false) 
  public String getHashedPassword() { } 
}