'spring data jpa query to retrieve List of objects that are not of the type of the actual repository
I'm using a seperate class StudentSubject to map a many to many relationship because i use additional columns for the mapping(boolean favorite and int amountOfStars).
I have a repository for StudentSubject class:
@Repository
public interface StudentSubjectRepository extends JpaRepository<StudentSubject, Long> {
public List<Subject> findAllByStudentStudentIdAndFavoriteTrue(Long studentId);
}
I'm trying to retrieve a list of Subject objects instead of StudentSubject objects. How can this be done?
StudentSubject class:
public class StudentSubject {
@Id
@SequenceGenerator(
name = "student_subject_sequence",
sequenceName = "student_subject_sequence",
allocationSize = 1
)
@GeneratedValue(
strategy = GenerationType.SEQUENCE,
generator = "student_subject_sequence"
)
private Long id;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "STUDENT_ID")
private Student student;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "SUBJECT_ID")
private Subject subject;
private int amountOfStars;
private boolean favorite;
}
subject class:
public class Subject {
@Id
@SequenceGenerator(
name = "subject_sequence",
sequenceName = "subject_sequence",
allocationSize = 1
)
@GeneratedValue(
strategy = GenerationType.SEQUENCE,
generator = "subject_sequence"
)
private Long subjectId;
private String title;
private String description;
private int amountOfStudents;
@ManyToMany(
cascade = {CascadeType.PERSIST, CascadeType.REFRESH}
)
@JoinTable(
name = "subject_promotor",
joinColumns = @JoinColumn(
name = "subject_id",
referencedColumnName = "subjectId"
),
inverseJoinColumns = @JoinColumn(
name = "promotor_id",
referencedColumnName = "promotorId"
)
)
private List<Promotor> promotorList;
@ManyToMany(
cascade = {CascadeType.PERSIST, CascadeType.REFRESH}
)
@JoinTable(
name = "subject_topic",
joinColumns = @JoinColumn(
name = "subject_id",
referencedColumnName = "subjectId"
),
inverseJoinColumns = @JoinColumn(
name = "topic_id",
referencedColumnName = "topicId"
)
)
private List<Topic> topicList;
@ManyToMany(
cascade = {CascadeType.PERSIST, CascadeType.REFRESH}
)
@JoinTable(
name = "subject_targetAudience",
joinColumns = @JoinColumn(
name = "subject_id",
referencedColumnName = "subjectId"
),
inverseJoinColumns = @JoinColumn(
name = "targetAudience_id",
referencedColumnName = "targetAudienceId"
)
)
private List<TargetAudience> targetAudienceList;
private Boolean approved;
@ManyToOne()
@JoinColumn(name="employer_id", referencedColumnName = "employerId")
private Employer employer;
}
student class:
public class Student {
@Id
@SequenceGenerator(
name = "student_sequence",
sequenceName = "student_sequence",
allocationSize = 1
)
@GeneratedValue(
strategy = GenerationType.SEQUENCE,
generator = "student_sequence"
)
private Long studentId;
@OneToOne(
cascade = CascadeType.ALL,
fetch = FetchType.EAGER,
optional = false
)
@JoinColumn(
name = "user_id",
referencedColumnName = "userId"
)
private User user;
@OneToOne(
cascade = CascadeType.ALL,
fetch = FetchType.EAGER,
optional = true
)
@JoinColumn(
name = "target_audience",
referencedColumnName = "TargetAudienceId"
)
private TargetAudience targetAudience;
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
