Sono nuovo di primavera Boot & APP ...modo corretto allo strato DAO basato Primavera JPA utilizzando Boot Spring Framework
Diciamo che ho due entità mappate a due tabelle che sono uniti in un database.
Student-1 ------ < -Corso
Inoltre, lascia presumere che il database è già stato creato e popolato.
Questo raffigura che uno studente ha molti corsi ...
mio studente Entity:
@Entity
public class Student {
@OneToMany(mappedBy="student")
private List<Courses> courses;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "Student_Id")
private long studentId;
@Column(name = "Student_Name")
private String studentName;
protected Student() { }
// Getters & Setters
}
mio corso Entity:
@Entity
public class Course {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "Course_Id")
private long courseId;
@Id
@Column(name = "Student_Id")
private long studentId;
@ManyToOne
@PrimaryKeyJoinColumn(name="Student_Id", referencedColumnName="Student_Id")
private Student student;
@Column(name = "Course_Name")
private String courseName;
// Getters & Setters
}
nelle guide tutorial di Primavera di avvio, si illustra come per estendere un'interfaccia CrudRepository, ma non specifica come impostare un DAO basato sulla primavera che contiene metodi di ricerca personalizzati che utilizzano HQL e Entit yManager al suo interno.
Il seguente DAO e DaoImpl è corretto?
public interface CourseDao {
List<Course> findCoursesByStudentName(String studentName);
}
@Repository
public class CourseDaoImpl implements CourseDao {
@PersistenceContext
EntityManager em;
public List<Course> findCoursesByStudentName(String studentName) {
String sql = "select c.courseName" +
"from Course c, Student s " +
"where c.course_id = s.student_id " +
"and s.studentName = :studentName ";
Query query = em.createQuery(sql);
query.setParameter("studentName", studentName);
return query.getResultList();
}
}
E poi nel codice client, ad esempio, nella classe principale:
public class Application {
@Autowired
CustomerDao dao;
public static void main (String args []) {
List<Course> courses = dao.findCoursesByStudentName("John");
}
}
E 'questo il modo standard per usare HQL all'interno Spring DAO? Ho visto esempi dell'annotazione @Transactional anteposta all'imp della classe DAO (ad esempio CustomerDAOImpl)?
Per favore fatemi sapere se questo è il modo di scrivere per strutturare la mia app Spring Boot o dovrei estendere/aggiungere solo al CrudRepository?
Se qualcuno potesse correggere il mio esempio e indicarmi un URL che parla di HQL usando Entità che sono state unite, sarei molto grato.
Le guide di avvio di primavera non descrivevano join o DAO: ho solo bisogno di imparare come creare correttamente i metodi finder che emulano l'istruzione select che restituisce elenchi o strutture dati.
Grazie per aver il tempo di leggere questo ...
shazin, grazie per rispondere ... È questo il modo standard per fare HQL? Stai facendo una selezione di studenti e non il join? Sono confuso ... Inoltre, perché readOnly = true? Cosa intendi per definire correttamente JpaTransactionManager? Come lo faresti in Spring Boot? Perché non usare il CrudRespository? Quello che sto cercando è il modo standard per fare le cose ... Grazie per il tuo aiuto. –
Dove è definito questo User class/oggetto ref? Intendevi Studente? –