У меня есть часто задаваемые вопросы, как показано ниже. Здесь поле createdBy имеет связь manyToOne с сущностью пользователя. Ниже joinColumns показывает ассоциацию. В объекте User у меня есть отношение OneToMany с UserRoles и UsersUnit, которое ОЧЕНЬ загружается для пользователя, а не для часто задаваемых вопросов. Поэтому я добавил @JsonIgnoreProperties для UsersUnit и UsersRole, и соответствующий объект User показан ниже.
@Entity
@Table(name = "FAQ", catalog="abc")
public class Faq implements Serializable {
public Faq() {
super();
}
@Column(name = "CREATE_DATE")
private Timestamp createDate;
@Where(clause = "DELETE_DATE is null")
@Column(name = "DELETE_DATE")
private Timestamp deleteDate;
@Column(name = "DELETED_BY")
private BigDecimal deletedBy;
@Column(name = "DOC_BLOB", nullable = false)
@JsonIgnore
private byte[] docBlob;
@Column(name = "DOC_NAME", nullable = false, length = 100)
private String docName;
@Id
private BigDecimal id;
@Column(name = "ORDER_BY")
private BigDecimal orderBy;
@Column(name = "UPDATE_DATE")
private Timestamp updateDate;
@Column(name = "UPDATED_BY")
private BigDecimal updatedBy;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumns({
@JoinColumn(name="created_by", referencedColumnName="id")
})
private User faqCreatedBy;
}
Объект пользователя:
@Entity
@Table(name = "USERS", catalog="abc")
@JsonInclude(Include.NON_NULL)
public class User extends EntityLog{
private BigDecimal id;
private BigDecimal edipi;
private String firstname;
private String lastname;
private String email;
..///
private Set<UsersRoles> userRoles;
private Set<UsersUnit> usersUnit;
@Id
@Column(name="id")
public BigDecimal getId() {
return id;
}
...///
@Column
@JsonIgnoreProperties({ "faqCreatedBy" })
@OneToMany(fetch = FetchType.EAGER,mappedBy = "user",cascade = {CascadeType.ALL})
@JsonManagedReference
public Set<UsersRoles> getUserRoles() {
return userRoles;
}
...///
@Column
@JsonIgnoreProperties({ "faqCreatedBy" })
@OneToMany(fetch = FetchType.EAGER,mappedBy = "user",cascade = {CascadeType.ALL})
@JsonManagedReference
public Set<UsersUnit> getUsersUnit() {
return usersUnit;
}
////...
}
С этим изменением я ожидаю, что FAQ загрузится с сущностью пользователя, но я не жду загрузки UsersRoles и UsersUnit. Но это не то, что я вижу. Когда faq загружается, он загружает User и UsersRoles и UsersUnit. Я использую Spring JPA к вашему сведению. Любые выводы, что не так? Благодарим за любой вклад.
Отвечает ли это на ваш вопрос? @JsonIgnore не игнорирует поля в спящем режиме Entity
ИМХО корень проблемы в нарушении разделения интересов. Здесь речь идет о «передаче данных» и «постоянстве», реализованных в одном и том же объекте. Это случается слишком часто, к сожалению. Я всегда использую отдельные DTO и Entities, даже несмотря на то, что преобразование сопряжено с некоторыми дополнительными трудностями. В любом случае, если вы предполагаете, что если вы аннотируете, например.
getUserRoles
с@JsonIgnoreProperties({"faqCreatedBy"})
Джексон не получит доступ к этому полю, если он загружен через свойствоfaqCreatedBy
, я думаю,JsonIgnoreProperties
работает не так!