Java 在hibernate实体中使用@JsonIgnore和FetchType.LAZY
我在我的Spring项目hibernate中使用java类映射我的表,并使用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
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}]}