【问题标题】:Ignore an Entity fields for a Spring REST call忽略 Spring REST 调用的实体字段
【发布时间】:2015-05-26 22:02:59
【问题描述】:

我有两个实体类“Teacher & Class”,它们之间存在@OneToMany 关系。第一个在/teachers/{id} 有一个休息接口,第二个在/classes/{id} 有一个休息接口。当用户向Teacher 接口发送GET 请求时,他应该收到所有TeacherClass 字段。但是,当用户向Class 接口发送GET 请求时,我希望他接收所有Class 字段,并且只接收Teacher 字段的一部分“firstName, lastName

以下是实体代码:

@Entity
@DiscriminatorValue("Th")
public class Teacher{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String firstName;
private String lastName;
private String phone;
@Column(unique = true)
@Email
private String email;
private String password;
@OneToMany(mappedBy = "teacher", fetch = FetchType.EAGER)
private List<Class> classes;
@OneToMany(mappedBy = "teacher", fetch = FetchType.EAGER)
private List<Note> notes;

protected Teacher() {

   }
}



@Entity
public class Class {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String name;
@OneToOne()
@JoinColumn(name = "subject_id")
private Subject subject;
@Enumerated(EnumType.STRING)
private Grade grade;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "teacher_id")
private Teacher teacher;

@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "class_student", joinColumns = { @JoinColumn(name = "class_id", referencedColumnName = "id") }, inverseJoinColumns = { @JoinColumn(name = "student_id", referencedColumnName = "id") })
private List<Student> students;

protected Class() {

   }
}
//getters and setters

【问题讨论】:

  • 那么,您的问题到底是什么?
  • 如果您使用的是 Hibernate 标准,请使用 Projections 仅获取所需的列..

标签: java json spring hibernate jpa


【解决方案1】:

您的请求听起来是互斥的,不要加载 Teacher 对象,而是加载它的 ID。

最好让教师对象延迟加载,然后在加载类后对其进行初始化。

仅供参考 @JsonIgnore 阻止在进行 RESTfull 调用时加载对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    相关资源
    最近更新 更多