【问题标题】:Why my h2 database is not finding doctor and patient ids?为什么我的 h2 数据库找不到医生和患者 ID?
【发布时间】:2020-05-20 07:53:30
【问题描述】:

所以,我一直在使用 thymeleaf、spring 和 h2 数据库在 java 上创建一个医院系统。我有一个函数应该插入一个新的预约与以前的医生和病人,但我的 h2 数据库没有显示他们的 id,它只是说 null。

这是控制器中的功能


    @PostMapping(value="/insertNewAppointment")
    public String insertNewAppointmentPost(Appointment appointment, Patient patient, Doctor doctor)
    {

        System.out.println(patient.getName());
        System.out.println(patient.getSurname());
        System.out.println(doctor.getName());
        System.out.println(doctor.getSurname());
        System.out.println();
        Patient newPatient = patientRepo.findByNameAndSurname (patient.getName(), patient.getSurname());
        System.out.println(patient);


        Doctor newDoctor = doctorRepo.findByNameAndSurname (doctor.getName(), doctor.getSurname());
        System.out.println(doctor);

        Appointment newAppointment = new Appointment(appointment.getTime(), newPatient, newDoctor);
        appointmentRepo.save(newAppointment);







        return "redirect:/showAllDoctors";
    }

这里是类

病人

@Entity
@Table (name = "PatientTable")
public class Patient {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id_P")
    private int id_P;

    @Column(name = "Name")
    private String name;

    @Column(name = "surname")
    private String surname;

    @Column(name = "isHospitalised")
    private boolean isHospitalised;

    @OneToMany (mappedBy = "patient")
    private Collection<Appointment> allAppointmentsP;




    @OneToOne
    @JoinColumn (name = "u_ID")
    private User user;

医生

@Entity
@Table (name = "DoctorTable")
public class Doctor {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id_D")
    private int id_D;

    @Column(name = "name")
    private String name;

    @Column(name = "surname")
    private String surname;

    @Column(name = "officeNumber")
    private short officeNum;

    @OneToOne
    @JoinColumn (name = "id_U")
    private User user;


    @OneToMany (mappedBy = "doctor")
    private Collection<Appointment> allAppointmentsD;

约会

@Entity
@Table (name = "AppointmentTable")
public class Appointment {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "app_ID")
    private int app_ID;

    @Column(name = "time")
    private String time;

    @Cascade(value = { CascadeType.ALL })
    @ManyToOne
    @JoinColumn (name = "id_P")
    private Patient patient;

    @Cascade(value = { CascadeType.ALL })
    @ManyToOne
    @JoinColumn (name = "id_D")
    private Doctor doctor; 

Doctor and Patient repos 只有这一行

Doctor findByNameAndSurname(String name, String surname);

和 insertnewappointment html 文件

<!DOCTYPE HTML>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
    <body>
    <h2>Add a new appointment</h2>

        <form action="#" th:action = "@{/insertNewAppointment}" th:object = "${appointment}"  method = "post">

            Time (DD-MMM-YYYY HH:mm)
            <input type = "text" th:field = "*{time}" /> <br>

            Patient Name
            <input type = "text" th:field = "*{patient.name}" /> <br>
            Patient Surname
            <input type = "text" th:field = "*{patient.surname}" /> <br>
            Doctor Name
            <input type = "text" th:field = "*{doctor.name}" /> <br>
            Doctor Surname
            <input type = "text" th:field = "*{doctor.surname}" /> <br>


            <input type = "submit" value = "Add new appointment" />


        </form>

    </body>
</html>
I posted the lines i got in repos. This is the function that loads the data in, with this everything is alright, the id show up as they should on the h2 database. ```@GetMapping(value="/testingData")
    public String testing()
    {
        User u1 = new User("Janis", "123");
        User u2 = new User("Juris", "321");
        User u3 = new User("Jana", "jana123");
        User u4 = new User("Peteris", "peteris123");
        User u5 = new User("Matiss", "134");
        User u6 = new User("Jana", "JanA");

        userRepo.save(u1);
        userRepo.save(u2);
        userRepo.save(u3);
        userRepo.save(u4);
        userRepo.save(u5);
        userRepo.save(u6);

        Patient p1 = new Patient("Janis", "Berzins", true, u1);
        Patient p2 = new Patient("Juris", "Kalnins", true, u2);
        Patient p3 = new Patient("Jana", "Jauka", true, u3);

        patientRepo.save(p1);
        patientRepo.save(p2);
        patientRepo.save(p3);

        Doctor d1 = new Doctor("Peteris", "Krumins", (short) 101, u4);
        Doctor d2 = new Doctor("Matiss", "Ozolins", (short) 102, u5);
        Doctor d3 = new Doctor("Liene", "Karklina", (short)103, u6);

        doctorRepo.save(d1);
        doctorRepo.save(d2);
        doctorRepo.save(d3);

        Appointment a1 = new Appointment("26-JUN-2019 13:30", p2, d1);
        Appointment a2 = new Appointment("30-JUN-2019 10:15", p1, d3);
        Appointment a3 = new Appointment("02-JUL-2019 15:45", p3, d2);

        appointmentRepo.save(a1);
        appointmentRepo.save(a2);
        appointmentRepo.save(a3);


        return "ok";```

【问题讨论】:

  • 您能否提供结果和您所做的查询?也许回购会有所帮助。
  • 我发布了我在 repos 中获得的行。这是加载数据的函数,这样一切都很好,id 会显示在 h2 数据库上。我在第一篇文章中添加了加载数据功能

标签: java html spring thymeleaf h2


【解决方案1】:

尝试将id 的类型更改为long@GeneratedValue(strategy = GenerationType.SEQUENCE

【讨论】:

  • 感谢您的快速响应,但没有帮助。仍然得到这个 - Patient [p_ID=0, name=null, surname=null, isHospitalised=false, allAppointmentsP=null, user=null] Doctor [id_D=0, name=null, surname=null, officeNum=0, user=null, allAppointmentsD=null] 和 h2.database 的截图 - prnt.sc/s49u1h
  • 愚蠢的问题,但是您是否在您的 bean 类中添加了 getter 和 setter,因为我在您的代码快照中没有看到它?
  • 是的,当然,我只是没有包含它们,因为那样代码会太长。
【解决方案2】:

默认情况下,主键是一个连续的 64 位数字(长),所以添加长

Long 比 long 好,因为通过检查 null 值来检查实体是否具有持久身份更正确(在 MySQL 中,您可以拥有值为 0 的 ID)。还有一些库,如 Spring,在其逻辑中基于 Long 类型的 ID(默认情况下)

【讨论】:

  • 仍然给我 null,也许我应该显示更多代码以便更好地理解?
  • 尝试使用@RequestBody annotaiton public String insertNewAppointmentPost(RequestBody Appointment interview, RequestBody Patient patient, RequestBody Doctor doctor) {
  • @Ramsey 请向我们展示您的 findBy 函数和我假设的扩展 JpaRepository 的存储库
  • public interface DoctorRepo extends CrudRepository&lt;Doctor, Integer&gt;{ Doctor findByNameAndSurname(String name, String surname); } 病人是同一个。
  • 将 Integer 更改为 Long @Ramsey
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
相关资源
最近更新 更多