Новое в Spring Boot и JPA...
Скажем, у меня есть два объекта, сопоставленные двум таблицам, которые объединены в базу данных.
Стьюдента-1 ------ < -Course
Кроме того, давайте предположим, что база данных уже создана и заполнена.
Это показывает, что у одного студента много курсов...
Моя студенческая сущность:
@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
}
Мой курс:
@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
}
В Spring Руководствах по учебному пособию по загрузке показано, как расширить интерфейс CrudRepository, но он не указывает, как настроить DAO Spring, который содержит настраиваемые методы поиска, которые используют внутри него HQL и EntityManager.
Правильны ли следующие DAO и DaoImpl?
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();
}
}
А затем в клиентском коде, например, в основном классе:
public class Application {
@Autowired
CustomerDao dao;
public static void main (String args []) {
List<Course> courses = dao.findCoursesByStudentName("John");
}
}
Является ли это стандартным способом использования HQL внутри Spring DAOs? Я привел примеры аннотации @Transactional, которые были добавлены к имплантату класса DAO (например, CustomerDAOImpl)?
Пожалуйста, дайте мне знать, является ли это способом записи моего приложения Spring Boot, или я должен только продлить/добавить только CrudRepository?
Если кто-то может исправить мой пример и указать мне URL-адрес, который говорит о HQL, используя Entities, которые были объединены, я был бы очень благодарен.
Руководство по загрузке Spring не отображало объединений или DAO - мне просто нужно узнать, как правильно создавать методы поиска, которые эмулируют оператор выбора, который возвращает списки или структуры данных.
Спасибо, что нашли время, чтобы прочитать это...