Java 在hibernate实体中使用@JsonIgnore和FetchType.LAZY

Java 在hibernate实体中使用@JsonIgnore和FetchType.LAZY,java,json,spring,hibernate,jackson,Java,Json,Spring,Hibernate,Jackson,我在我的Spring项目hibernate中使用java类映射我的表,并使用FetchType.LAZY添加了@JsonIgnore,以避免json映射期间出现异常。使用此配置,性能良好。 这是一个例子: @Entity @Table(name = "clientversion", catalog = "ats") public class ClientVersion implements java.io.Serializable { /** * */ p

我在我的Spring项目hibernate中使用java类映射我的表,并使用
FetchType.LAZY
添加了
@JsonIgnore
,以避免json映射期间出现异常。使用此配置,性能良好。 这是一个例子:

@Entity
@Table(name = "clientversion", catalog = "ats")
public class ClientVersion implements java.io.Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private Integer idClientVersion;
    private String name;
    private Date releaseDate;
    private String note;
    private String filePath;

    @JsonIgnore
    private Set<User> users = new HashSet<User>(0);

    public ClientVersion() {
    }

    /**
     * @param idClientVersion
     * @param name
     * @param releaseDate
     * @param users
     */
    public ClientVersion(Integer idClientVersion, String name, Date releaseDate, String note, String filePath, Set<User> users) {
        this.idClientVersion = idClientVersion;
        this.name = name;
        this.note = note;
        this.releaseDate = releaseDate;
        this.users = users;
        this.setFilePath(filePath);
    }



    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "id_clientVersion", unique = true, nullable = false)
    public Integer getIdClientVersion() {
        return this.idClientVersion;
    }

    public void setIdClientVersion(Integer idClientVersion) {
        this.idClientVersion = idClientVersion;
    }



    /**
     * @return the name
     */
    @Column(name = "name", nullable = false)
    public String getName() {
        return name;
    }

    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * @return the releaseDate
     */
    @Column(name = "releaseDate", nullable = false)
    public Date getReleaseDate() {
        return releaseDate;
    }

    /**
     * @param releaseDate the releaseDate to set
     */
    public void setReleaseDate(Date releaseDate) {
        this.releaseDate = releaseDate;
    }

    /**
     * @return the note
     */
    @Column(name = "note")
    public String getNote() {
        return note;
    }

    /**
     * @param note the note to set
     */
    public void setNote(String note) {
        this.note = note;
    }

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "clientVersion")
    public Set<User> getUsers() {
        return this.users;
    }

    public void setUsers(Set<User> users) {
        this.users = users;
    }

    /**
     * @return the filePath
     */
    @Column(name = "filePath")
    public String getFilePath() {
        return filePath;
    }

    /**
     * @param filePath the filePath to set
     */
    public void setFilePath(String filePath) {
        this.filePath = filePath;
    }
}
这是返回的json:

{"data":[{"idClientLicense":30,"startDate":"2016-02-10","endDate":"2016-02-19","counter":350,"macAddress":"1223","cpuId":"123CPU","user":null}]}
有时我需要在我的界面中使用
user.username
字段,但由于我使用了
@JsonIgnore
,因此我没有收到用户。 为了解决这个问题,我用一个新的列表复制了返回的列表,并在其中设置了字段,但这是一个糟糕的做法,因为我可能会复制许多元素。
解决此问题的最佳做法是什么?

最近也遇到了同样的问题。我认为Jackson
JsonView
s可能是一个可行的解决方案


请参见和

其中没有JsonIgnore标记,您是否可以更新代码段以包含注释?您是否考虑过使用DTO(数据传输对象)?这样,您就可以控制客户在各种情况下收到的信息。Transformer是一个很好的转换对象quickI的工具,我用两个例子更新我的代码。对于每个实体,我应该创建DTO类和in服务类,在这里我调用jpa查询,我必须进行映射并返回DTO实体?
{"data":[{"idClientLicense":30,"startDate":"2016-02-10","endDate":"2016-02-19","counter":350,"macAddress":"1223","cpuId":"123CPU","user":null}]}