MArtin
01/09/2023, 6:42 PMpackage ar.com.school.management.models.entity
import com.fasterxml.jackson.annotation.JsonIgnoreProperties
import jakarta.persistence.*
@Entity
data class Career(@Id
@GeneratedValue(strategy =
GenerationType.IDENTITY)
@Column(name = "career_id")
var id: Long?,
var name: String?,
@ManyToMany(cascade = [CascadeType.ALL], fetch = FetchType.LAZY)
@JoinTable(name = "career_subject",
joinColumns = [JoinColumn(name = "career_id", referencedColumnName = "career_id")],
inverseJoinColumns = [JoinColumn(name = "subject_id", referencedColumnName = "subject_id")])
@JsonIgnoreProperties("subjectCareers")
var subjects: List<Subject>? = mutableListOf(),
@OneToMany(mappedBy = "career")
var students: List<Student>? = mutableListOf(),
@ManyToMany(cascade = [CascadeType.ALL], fetch = FetchType.LAZY)
@JoinTable(name = "career_teacher",
joinColumns = [JoinColumn(name = "career_id", referencedColumnName = "career_id")],
inverseJoinColumns = [JoinColumn(name = "teacher_id", referencedColumnName = "teacher_id")])
@JsonIgnoreProperties("careers")
var teachers: List<Teacher>? = mutableListOf()) {
constructor(): this(null,null,null, null, null)
}
package ar.com.school.management.models.entity
import com.fasterxml.jackson.annotation.JsonIgnoreProperties
import jakarta.persistence.*
@Entity
data class Student(@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "student_id")
var id: Long?,
@Column(name = "social_security_number")
val socialSecurityNumber: Int?,
var name: String?,
var surname: String?,
var address: String? ,
var age: Int?,
@ManyToOne
@JoinColumn(name = "career_id")
var career: Career?,
@ManyToMany(mappedBy = "students")
@JsonIgnoreProperties("students")
var subjects: List<Subject>? = mutableListOf(),
@Column(name = "finished_subjects")
var finishedSubjects: List<Subject>? = mutableListOf(),
@Column(name = "subjects_marks")
var subjectsMarks: Map<Subject, Double>? = mutableMapOf()) {
constructor(): this(null,null,null,null,null,
null,null, null,null,null)
}
package ar.com.school.management.models.entity
import com.fasterxml.jackson.annotation.JsonIgnoreProperties
import jakarta.persistence.*
@Entity
data class Subject(@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "subject_id")
var id: Long?,
var name: String?,
@ManyToMany(cascade = [CascadeType.ALL], fetch = FetchType.LAZY)
@JoinTable(name = "subject_student",
joinColumns = [JoinColumn(name = "subject_id", referencedColumnName = "subject_id")],
inverseJoinColumns = [JoinColumn(name = "student_id", referencedColumnName = "student_id")])
@JsonIgnoreProperties("subjects")
var students: List<Student>? = mutableListOf(),
@ManyToMany(mappedBy = "subjects")
@JsonIgnoreProperties("subjects")
@Column(name = "careers")
var subjectCareers: List<Career>? = mutableListOf(),
@ManyToMany(cascade = [CascadeType.ALL], fetch = FetchType.LAZY)
@JoinTable(name = "subject_teacher",
joinColumns = [JoinColumn(name = "subject_id", referencedColumnName = "subject_id")],
inverseJoinColumns = [JoinColumn(name = "teacher_id", referencedColumnName = "teacher_id")])
@JsonIgnoreProperties("subjects")
var subjectTeachers: List<Teacher>? = mutableListOf(),
@Column(name = "correlative_subjects")
@ElementCollection
var correlativeSubjects: List<String>? = mutableListOf()) {
constructor(): this(null, null, null, null, null, null)
}
package ar.com.school.management.models.entity
import com.fasterxml.jackson.annotation.JsonIgnoreProperties
import jakarta.persistence.*
@Entity
data class Teacher(@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "teacher_id")
var id: Long?,
@Column(name = "social_security_number")
val socialSecurityNumber: Int?,
var name: String?,
var surname: String?,
var address: String? ,
var age: Int?,
@ManyToMany(mappedBy = "subjectTeachers")
@JsonIgnoreProperties("subjectTeachers")
var subjects: List<Subject>? = mutableListOf(),
@ManyToMany(mappedBy = "teachers")
@JsonIgnoreProperties("teachers")
var careers: List<Career>? = mutableListOf()) {
constructor(): this(null,null,null,null,null,null,null, null)
}