I have following relationship in my spring boot:
public class Clazz {
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Id
@Column(name = "id")
private Integer id;
@Column(name = "lesson_id")
@NotNull(message = "{lesson.is_required}")
private Integer lessonId;
@Column(name = "level_id")
@NotNull(message = "{level.is_required}")
private Integer levelId;
@Column(name = "name")
@NotEmpty(message = "{name.is_required}")
private String name;
@OneToOne
@JoinColumn(name = "lesson_id", referencedColumnName = "id", insertable = false, updatable = false)
private Lesson lesson;
@OneToOne
@JoinColumn(name = "level_id", referencedColumnName = "id", insertable = false, updatable = false)
private Level level;
}
Now my Lesson entity has Level entity:
public class Lesson {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "name")
@NotEmpty(message = "{name.is_required}")
private String name;
@Column(name = "description")
private String description = "";
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "lesson_id")
Collection<Level> levels = new ArrayList<>();
}
And finally my Level class:
public class Level {
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Id
@Column(name = "id", insertable = false, updatable = false)
private Integer id;
@Column(name = "lesson_id")
private Integer lessonId;
@Column(name = "name")
private String name;
@Column(name = "step")
private Integer step;
@Column(name = "description")
private String description="";
}
With this relationship defined, when I fetch data, getting some extra info in my results:
[
{
"id": 2,
"lessonId": 1,
"levelId": 1,
"name": "English Class March",
"branch": {
"id": 1,
"name": "3 mikr branch",
"email": "",
"phone": "",
"address": "3 mikr, foo, bar"
},
"lesson": {
"id": 1,
"name": "math",
"description": "math lesson",
"levels": [
{
"id": 1,
"lessonId": 1,
"name": "First level",
"step": 1,
"description": "1st level descr"
}
]
},
"level": {
"id": 1,
"lessonId": 1,
"name": "First level",
"step": 1,
"description": "1st level descr"
}
}
]
How can I tell JPA not to fetch sub-entities, ideally I do not need levels in lesson field of result.