Méthode appropriée pour superposer le DAO basé sur Spring JPA à l'aide de Spring Boot Framework

Suis nouveau Printemps Boot & JPA...

Disons que j'ai deux entités mappées à deux tables qui sont jointes dans une base de données.

Étudiant-1------<-Cours

Aussi, permet de présumer que la base de données est déjà créé et rempli.

Cela montre qu'un élève a de nombreux cours...

Mon Étudiant De L'Entité:

@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
}

Mon Cours Entité:

@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

}

Au Printemps de Démarrage du Tutoriel Guides, il montre comment étendre un CrudRepository interface, mais
il ne précise pas comment l'installation d'un Ressort en fonction de DAO qui contient personnalisée finder méthodes qui utilisent les requêtes HQL et EntityManager à l'intérieur.

Est la suivante DAO et DaoImpl correct?

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();
    }
}   

Et ensuite dans le code du client, par exemple, dans la classe principale:

 public class Application {

    @Autowired
    CustomerDao dao;

    public static void main (String args []) {
        List<Course> courses = dao.findCoursesByStudentName("John");
    }   
 }

Est-ce la norme de façon à utiliser les requêtes HQL à l'intérieur de Printemps DAOs ? J'ai seend exemples de la @Transactional annotation d'être ajouté à la classe DAO est impl (par exemple CustomerDAOImpl) ?

S'il vous plaît laissez-moi savoir si c'est l'écriture, à la structure de mon Ressort de Démarrage de l'app ou suis-je censé étendre /ajouter à la CrudRepository seulement?

Si quelqu'un pouvait corriger mon exemple et me pointer vers une URL qui parle HQL l'aide d'Entités qui sont jointes, je vous serais très reconnaissant.

Le Printemps de Démarrage des guides de ne pas représenter les jointures ou DAOs - j'ai juste besoin de savoir comment créer correctement finder méthodes qui émulent instruction select qui renvoient des listes ou des structures de données.

Merci de prendre le temps de lire ceci...

source d'informationauteur PacificNW_Lover | 2015-04-01