Hibernate один на один с базой данных H2 - PullRequest
0 голосов
/ 13 апреля 2020

Я создал проект Spring Boot для сопоставления «один к одному» с использованием базы данных H2, когда я создал запись, внешний ключ в другой таблице показывает нулевое значение.

Настройка, связанная с БД, и консоль в порядке, когда Я вижу записи, затем я нашел нулевое значение.

Руководство по Pls, где я делаю ошибку.

Я пробовал без соединения один-к-одному, оно работает нормально.

Схема. sql


DROP TABLE IF EXISTS instructor;

CREATE TABLE instructor (
  id INT AUTO_INCREMENT  PRIMARY KEY,
  first_name VARCHAR(250) NOT NULL,
  last_name VARCHAR(250) NOT NULL,
  email VARCHAR(250) DEFAULT NULL
);


DROP TABLE IF EXISTS instructor_detail;

CREATE TABLE instructor_detail (
    id INT AUTO_INCREMENT PRIMARY KEY,
    instructor_id INT,
    youtube_channel VARCHAR(250) NOT NULL,
    hobby VARCHAR(20) NOT NULL,
    FOREIGN KEY (instructor_id) REFERENCES instructor(id)
);

Инструктор. java


@Table(name = "instructor")
public class Instructor {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

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

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

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

    @OneToOne(cascade = CascadeType.ALL,mappedBy="instructor")
    private InstructorDetail instructorDetail;

    public Instructor(String firstName, String lastName, String email) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
    }
}

InstructorDetail. java


@Table(name = "instructor_detail")
public class InstructorDetail {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

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

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

    @OneToOne
    @JoinColumn(name = "instructor_id", nullable = false)
    private Instructor instructor;

    public InstructorDetail(String youtubeChannel, String hobby) {
        this.youtubeChannel = youtubeChannel;
        this.hobby = hobby;
    }
}

Основной Java Класс


@SpringBootApplication
public class H2JoinExampleApplication implements CommandLineRunner {

    public static void main(String[] args) {
        SpringApplication.run(H2JoinExampleApplication.class, args);
    }

    @Autowired
    private InstructorRepository instructorRepository;

    @Override
    public void run(String...args) throws Exception {

        Instructor instructor = new Instructor("ABC", "EFG", "ABC@gmail.com");

        InstructorDetail instructorDetail = new InstructorDetail("Java", "Cricket");

        // associate the objects
        instructor.setInstructorDetail(instructorDetail);

        instructorRepository.save(instructor);
    }
}
...